template<class CharType>
struct MyString
{
MyString()
{}
MyString(CharType*)
{}
};
int main()
{
char* narrow_str = 0;
MyString<char>(narrow_str); // error C2040
}
我的编译器是VC ++ 2013 RC。
由于错误C2040,无法编译最简单的代码。
错误C2040:'narrow_str':'MyString'的等级不同 间接来自'char *'
为什么?
答案 0 :(得分:2)
问题是这实际上并没有被解析为构造函数调用,而是作为变量定义。问题是您已经定义了变量narrow_str
。您可能已经知道这一点,但您可以通过给它命名来轻松解决这个问题。
template<class CharType>
struct MyString
{
MyString()
{}
MyString(CharType*)
{}
};
int main()
{
char* narrow_str = 0;
MyString<char> ns(narrow_str); // error C2040
}
BTW这也是在函数参数中使用这种类型的语法时最烦人的解析的来源。
老实说虽然我很惊讶你有一个不同的错误,因为g ++和clang都给了我一个明确的错误。
答案 1 :(得分:0)
创建结构的语法错误 改变
MyString<char>(narrow_str); // error C2040
到
MyString<char> myString(narrow_str);
没问题。