为什么我不能通过 vec[i].first() 访问 std::vector<std::pair<std::string, std::string>>?

Why can't I access a std::vector<std::pair<std::string, std::string>> through vec[i].first()?

我正在尝试通过 for 循环从 std::vector<std::pair<std::string,std::string>> 打印数据。 MSVC 说我无法通过此向量拨打电话。我也用 std::vector<std::pair<int, int>> 尝试过,但得到了同样的错误。我尝试在 std::vector<int> 上使用 for 循环进行迭代,它运行良好。我还没有尝试过其他编译器。

示例代码

    std::vector<std::pair<std::string, std::string>> header_data = get_png_header_data(file_contents);

    for (unsigned int i = 0; i < header_data.size(); i++)
    {
        std::cout << header_data[i].first(); //throws an error on this line "call of an object of a class type without an appropriate operator() or conversion functions to pointer-to-function type
    }

我希望有一种替代方法来访问我的向量或我可以使用的其他存储类型。

谢谢:)

你的std::pair基本上是(从某种意义上说):

    struct std::pair {
        std::string first;
        std::string second;
    };

这就是 std::pair 的含义。 firstsecond 是普通的 class 成员,而不是 methods/functions。现在您可以很容易地看到发生了什么:.first() 尝试调用 first() 运算符重载。显然,std::strings 没有这样的重载。这就是您的 C++ 编译器的错误消息告诉您的内容。如果您重新阅读编译器的错误消息,它现在变得 crystal 清晰。

你显然是想写 std::cout << header_data[i].first;