0

次のように定義されたコンストラクターを持つ 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 配列はコンパイラによって文字列として認識されていません。

これは予想される動作ですか?足りないものはありますか?

理想的には、そして私が期待していることは、コンパイラーが文字列も文字配列である可能性があることを認識しているということですが、私にはよくわかりません。

どんな助けでも大歓迎です。

4

1 に答える 1

1

あなたはやろうとしています

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

代わりにこれを試してください

 SomeClass sc("sstr"); // calls SomeClass::SomeClass(const string & input)
于 2013-06-21T03:18:00.103 に答える