2016-03-19 18 views
0

は、私は、このpublic:MyString(const char s[]):string(s){}へのMyStringクラスのコンストラクタのパラメータを変更ただし場合、行My String s2 = "cdf"をコンパイルすることはできません上記のコードでC++ Iが書いたクラス、C++クラスの初期化は、以下

class MyString:public string{ 
    public: 
    MyString(string s):string(s){} 
}; 

int main() 
{ 
    MyString s1("abc"); 
    MyString s2 = "cdf"; 
    return 0; 
} 

あります行がコンパイルされます。何故ですか?文字列とchar []はC++で同じですか?

おかげで、

+7

_「は、文字列ではなく、C++で[]同じことをchar型?」_いいえ –

+0

私も検索し、 'const'と参照について読んでいました - 高速なコードを作ります –

+0

おそらく、あなたはエラーを読むべきです、時には彼らはかなり有益で、あなたのコードに何が間違っているかを実際に教えてくれるでしょう... – skyking

答えて

0
MyString s2 = "cdf" 

これを行うには、値 "CDF" を有する文字列リテラルとしてS2を相当します。しかし、これは間違っています。MyStringは独自のデータ型であり、それをchar *という変数に置き換えたからです。

あなたは初期化しながら、等号を使用したい場合は、あなたがする必要があります。

MyString s2 = MyString(std::string("cdf")); 

これは、文字列「CDF」などのパラメータを使用してコンストラクタを呼び出し、オブジェクトがS2にコピーされます。

文字列と文字はまったく異なります。 Stringは派生データ型であり、C++標準ライブラリの一部ですが、charは単なる文字配列です。 stringをここに読む: http://www.cplusplus.com/reference/string/string/

+0

文字列リテラルは 'const char *'型ではありません。 –

+1

@ChristianHacklよろしくお願いします。答えを編集することができますので、より明確にすることができます。私が知っていることはchar *型であることです。 –

+0

まず、 'const'と' nonconst'の区別をより明確にする必要があります。文字列リテラルに関しては**配列**です。 '' cdf ''は' char const [4] '型です。 –