У меня есть класс 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 не рассматривается компилятором как строка.
Это ожидаемое поведение? Есть что-то, чего мне не хватает?
В идеале, и я ожидаю, что компилятор знает, что строка также может быть массивом символов, но я не уверен.
Любая помощь будет принята с благодарностью.
Вы пытаетесь сделать
SomeClass sc; // calls sc default constructor
sc = "sstr"; // calls SomeClass::operator=
Вместо этого попробуйте это
SomeClass sc("sstr"); // calls SomeClass::SomeClass(const string & input)
Других решений пока нет …