C++ 如何在c++;类函数
我在Ubuntu 12.04上尝试在clang-3.3和clang-3.0中使用C++ 如何在c++;类函数,c++,clang,stdmap,C++,Clang,Stdmap,我在Ubuntu 12.04上尝试在clang-3.3和clang-3.0中使用std::map时遇到问题: #include <iostream> #include <map> #include <string> class A { public: #if 0 //clang compiles ok typedef std::map<std::string,std::string> MapKeyValue_t; void Pri
std::map
时遇到问题:
#include <iostream>
#include <map>
#include <string>
class A
{
public:
#if 0 //clang compiles ok
typedef std::map<std::string,std::string> MapKeyValue_t;
void PrintMap(const MapKeyValue_t &my_map
= MapKeyValue_t())
#else // clang compiles fail
void PrintMap(const std::map<std::string,std::string> &my_map
= std::map<std::string,std::string>())
#endif
{
std::map<std::string,std::string>::const_iterator it;
for (it = my_map.begin(); it != my_map.end(); it++)
{
std::cout << it->first << " " << it->second << std::endl;
}
}
};
int main()
{
A a;
a.PrintMap();
return 0;
}
我能找到的最符合我问题的东西是这个主题:
但是,我不知道出了什么问题。希望有人能解释一下
更新:
void PrintMap(const std::map<std::string,std::string> &my_map
= (std::map<std::string,std::string>()))
void PrintMap(const std::map和my_map)
=(标准::映射())
没关系。谢谢。我在vs2012中编译并成功运行了它。
所以我认为这是编译器的问题。其他海报是正确的,我认为这是一个应该在Clang 3.4中修复的实例 正如bug报告中提到的和从那里链接的页面(以及您在更新中提到的),您可以通过在默认值中添加括号来解决此问题,如下所示:
void PrintMap(const std::map<std::string,std::string> &my_map
= (std::map<std::string,std::string>()))
void PrintMap(const std::map和my_map)
=(标准::映射())
看起来像-建议的解决方法是在默认参数周围放置parens,这会使它在此处编译。谢谢。我猜这是一个叮当虫,我也在等待叮当福克斯的帮助。你为什么使用gcc?我以前从没见过叮当声!这并不能回答这个问题。若要评论或要求作者澄清,请在他们的帖子下方留下评论。@Jandogen虽然我同意这个答案质量很低,但实际上是一个答案(“这是一个编译器错误”)。@BlackMamba为什么不使用gcc?为什么使用vs2012?是免费的吗?好吗?clang是最好的c++11编译器之一。这似乎是一个罕见的小故障。
void PrintMap(const std::map<std::string,std::string> &my_map
= (std::map<std::string,std::string>()))