0

我尝试了几个选项,但我的编译器没有选择运算符重载或其他错误。我正在使用 XCode 4.5.2 和默认的 Apple LLVM 编译器 4.1。

我得到的错误是这样的: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 回答