Tôi có một vấn đề khi cố gắng sử dụng std::map
trong vang-3.3 và Clang-3.0 trên Ubuntu 12.04:Làm thế nào để vượt qua std :: bản đồ như một tham số constructor mặc định trong C++ chức năng lớp
#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;
}
Tuy nhiên, trong khi mã biên dịch trong cả g++
và clang
tôi tiếp tục nhận được các lỗi như đầu ra:
test.cpp:14:36: error: expected ')'
= std::map<std::string,std::string>())
^
test.cpp:13:15: note: to match this '('
void PrintMap(const std::map<std::string,std::string> &my_map
^
test.cpp:14:24: error: expected '>'
= std::map<std::string,std::string>())
^
test.cpp:28:13: error: too few arguments to function call, expected 2, have 0
a.PrintMap();
~~~~~~~~~~^
test.cpp:13:2: note: 'PrintMap' declared here
void PrintMap(const std::map<std::string,std::string> &my_map
^
3 errors generated.
điều gần nhất tôi có thể thấy rằng phù hợp với vấn đề của tôi là chủ đề này: How to pass std::map as a default constructor parameter
Nhưng, tôi không biết có gì sai. Hy vọng rằng, ai đó có thể làm sáng tỏ điều này.
Cập nhật:
void PrintMap(const std::map<std::string,std::string> &my_map
= (std::map<std::string,std::string>()))
là ok. Cảm ơn.
vẻ như http://llvm.org/bugs/show_bug.cgi?id=13657 - giải pháp được đề xuất là đặt parens xung quanh đối số mặc định, làm cho nó biên dịch ở đây. – Mat