0
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 *”的间接级别不同

为什么?

4

2 回答 2

2

问题是这实际上没有被解析为构造函数调用,而是作为变量定义。问题是您已经定义了一个变量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 都给了我一个明显的错误。

于 2013-10-15T02:01:43.913 回答
0

您在创建结构时的语法是错误的。
改变

    MyString<char>(narrow_str); // error C2040

    MyString<char> myString(narrow_str); 

会好的。

于 2013-10-15T02:05:50.633 回答