.net — Visual Studio C ++ не распознает аргумент литеральной строки как ссылку на константную строку

У меня есть класс C ++ с конструктором, определенным следующим образом.

SomeClass( const string & input );

У меня есть некоторый клиентский код, который, я считаю, должен использовать этот конструктор неявно, как показано ниже.

SomeClass sc;
sc = "sstr";

Однако я получаю следующую ошибку компилятора.

//Error: no operator "=" matches these operands,
//operand types are: Fraction = const char[4]

Если я изменю конструктор SomeClass на следующий, ошибка компилятора исчезнет.

SomeClass( const char * input );

Я использую Visual Studio 11 и .NET 4.5.

Ясно, что литеральный массив char не рассматривается компилятором как строка.

Это ожидаемое поведение? Есть что-то, чего мне не хватает?

В идеале, и я ожидаю, что компилятор знает, что строка также может быть массивом символов, но я не уверен.

Любая помощь будет принята с благодарностью.

0

Решение

Вы пытаетесь сделать

 SomeClass sc;  // calls sc default constructor
sc = "sstr";   // calls SomeClass::operator=

Вместо этого попробуйте это

 SomeClass sc("sstr"); // calls SomeClass::SomeClass(const string & input)
1

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

Других решений пока нет …

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