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