5

我无法理解错误。我正在使用一个简单的向量映射(由字符串键入并存储字符串向量):

typedef std::map<std::string, std::vector<std::string> > TRouteMarkets;

以下代码(精简),

void CFoo::Bar(const char* route, const char* market)
{
    // ...

    TRouteMarkets::key_type key(route);
    TRouteMarkets::mapped_type mapped();
    TRouteMarkets::value_type pair(key, mapped);

    // ...
}

产生以下错误:

“Foo.cc”,第 518 行:错误:找不到匹配 std::pair<const std::string, std::vector<std::string>>::pair(const std::string, std CFoo::Bar(const char*, const char*) 中需要 ::vector<std::string>())。

但是()从映射中删除,

TRouteMarkets::mapped_type mapped;

修复错误。为什么?在这两种情况下都不mapped是字符串的空向量吗?

4

2 回答 2

7

这实际上是一个函数声明:

TRouteMarkets::mapped_type mapped();

声明一个名为的函数mapped,它不接受任何参数并返回一个TRouteMarkets::mapped_type.

于 2013-04-26T14:37:16.657 回答
5

您遇到了最令人头疼的解析问题。

TRouteMarkets::mapped_type mapped();

上面这行声明了一个名为的函数mapped,它不接受任何参数并返回一个类型为 的对象TRouteMarkets::mapped_type

使用 C++11,您可以使用统一的初始化语法来避免这个问题。

TRouteMarkets::mapped_type mapped{}; // Not a function declaration anymore
于 2013-04-26T14:38:42.430 回答