шаблоны — Почему самый простой код C ++ не может быть скомпилирован?

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: «thin_str»: «MyString» отличается по уровням
косвенность от ‘char *’

Зачем?

0

Решение

Проблема в том, что на самом деле это не анализируется как вызов конструктора, а как определение переменной. Проблема в том, что вы уже определили переменную 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 дали мне явную ошибку.

2

Другие решения

Ваш синтаксис в создании структуры неверен.
менять

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

в

    MyString<char> myString(narrow_str);

будет в порядке.

0

По вопросам рекламы [email protected]