0

いくつかのオプションを試しましたが、コンパイラが演算子のオーバーロードを検出しないか、何か他の問題が発生しています。デフォルトの Apple LLVM コンパイラ 4.1 で XCode 4.5.2 を使用しています。

私が得るエラーはこれです:Assigning to 'cocos2d::CCString *' from incompatible type 'const char [5]'

これらの行で:

CCString *s_piece__locks = "TEST";
cocos2d::CCString *s_piece__locks2 = "TEST";

私の .h コード:

CCString& operator= (const std::string& str);
//    CCString& operator= (const char* str);  // this doesn't work either
const CCString& operator = (const char *);

私の .cpp コード (これは関係ありませんが):

CCString& CCString::operator= (const std::string& str)
{
    m_sString = CCString::create(str)->m_sString;
    return *this;
}

const CCString& CCString :: operator = (const char* str)
{
    m_sString = CCString::create(str)->m_sString;
    return *this;
}

あなたの助けは非常に高く評価されています、ありがとう!

4

2 に答える 2

1

エラー メッセージAssigning to 'cocos2d::CCString *' from incompatible type 'const char [5]'は、char 配列を へのポインタに代入していることを示唆していますcocos2d::CCString

これはうまくいくはずです:

char bar[] = "ABCD";
cocos2d::CCString foo;
foo = bar;
于 2013-01-10T12:24:20.267 に答える
0
CCString *s_piece__locks = "TEST";
cocos2d::CCString *s_piece__locks2 = "TEST";

これは一体何をするためのものですか?ポインターを宣言しても、ポインター自体以外のオブジェクトは生成されません。したがって、基本的に、これが「機能する」ためにCCStringは、文字列「TEST」を表す別のオブジェクトがすでに存在している必要があります。しかし、それが与えられたとしても、C++ はどのように指し示すべきかをどのように知るのでしょうか? "TEST"ある種のハッシュマップなどで検索する必要があります。

これは意味がありません。コードを次のいずれかに変更します

  • スタック上のオブジェクトの直接使用:

    cocos2d::CCString s_piece;
    s_piece = "TEST";
    
  • 別の場所に存在するオブジェクトに新しいコンテンツを割り当てる。通常、これには参照を使用します。

    void assign_test_to(cocos2d::CCString& target) {
      target = "TEST";
    }
    

    ポインターでも可能です

    void assign_test_to_ptr(cocos2d::CCString* target) {
      *target = "TEST";
    }
    

    ただし、特別な理由がない限り、そうしないでください。

原則として、別の可能性があります。

cocos2d::CCString* s_piece_locks = new CCString;
*s_piece_locks = "TEST";

しかし、メモリ リークが非常に簡単に発生する可能性があるため、これは避けたいと考えています。何が大丈夫だろう

std::unique_ptr<cocos2d::CCString> s_piece_locks = new CCString;
*s_piece_locks = "TEST";
于 2013-01-10T13:00:23.310 に答える