通过overloading = operator从std :: string创建String对象

时间:2013-01-10 12:14:10

标签: c++ xcode string gcc operator-overloading

我已经尝试了几个选项,但我的编译器没有选择运算符重载或其他错误。我正在使用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;
}

非常感谢您的帮助,谢谢!

2 个答案:

答案 0 :(得分:1)

错误消息Assigning to 'cocos2d::CCString *' from incompatible type 'const char [5]'表明您正在将char数组分配给指向cocos2d::CCString的指针。

这应该有效:

char bar[] = "ABCD";
cocos2d::CCString foo;
foo = bar;

答案 1 :(得分: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";