And*_*ong 5 c++ stl compiler-errors
我无法理解错误.我正在使用一个简单的向量映射(由字符串键入并存储字符串向量):
typedef std::map<std::string, std::vector<std::string> > TRouteMarkets;
Run Code Online (Sandbox Code Playgroud)
以下代码(剥离),
void CFoo::Bar(const char* route, const char* market)
{
// ...
TRouteMarkets::key_type key(route);
TRouteMarkets::mapped_type mapped();
TRouteMarkets::value_type pair(key, mapped);
// ...
}
Run Code Online (Sandbox Code Playgroud)
产生以下错误:
"Foo.cc",第518行:错误:无法找到std :: pair <const std :: string,std :: vector <std :: string >> :: pair(const std :: string,std)的匹配项:: vector <std :: string>())在CFoo :: Bar(const char*,const char*)中需要.
但是删除了()映射,即
TRouteMarkets::mapped_type mapped;
Run Code Online (Sandbox Code Playgroud)
修复错误.为什么?mapped在任何一种情况下都不是一个空字符串向量?
这实际上是一个函数声明:
TRouteMarkets::mapped_type mapped();
Run Code Online (Sandbox Code Playgroud)
声明一个名为mapped不接受任何参数的函数并返回一个TRouteMarkets::mapped_type.
你遇到了最烦恼的解决问题.
TRouteMarkets::mapped_type mapped();
Run Code Online (Sandbox Code Playgroud)
上面的行声明了一个名为的函数mapped,该函数不带参数并返回一个类型的对象TRouteMarkets::mapped_type.
使用C++ 11,您可以使用统一初始化语法来避免此问题.
TRouteMarkets::mapped_type mapped{}; // Not a function declaration anymore
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
259 次 |
| 最近记录: |