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/

10-13 06:18