template<class CharType>
struct MyString
{
MyString()
{}
MyString(CharType*)
{}
};
int main()
{
char* narrow_str = 0;
MyString<char>(narrow_str); // error C2040
}
我的编译器是VC++ 2013 RC。
由于错误C2040,因此无法编译最简单的代码。
为什么?
最佳答案
问题在于这实际上不是解析为构造函数调用,而是解析为变量定义。问题是您已经定义了一个变量narrow_str
。您可能已经知道这一点,但是可以通过为其命名来轻松解决。
template<class CharType>
struct MyString
{
MyString()
{}
MyString(CharType*)
{}
};
int main()
{
char* narrow_str = 0;
MyString<char> ns(narrow_str); // error C2040
}
顺便说一句,这也是最烦人的解析的来源,当在函数参数中使用这种类型的语法时,解析就会发生。
老实说,尽管我很惊讶您遇到了另一个错误,因为g++和clang都给了我一个明显的错误。
关于c++ - 为什么不能编译最简单的C++代码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19372126/