我正在学习 cpp,在我的最后一个作业中,我正在重写 std::string 类。 所以这是我的代码大纲: 字符串类:
class String {
public:
String(const char* sInput) {
string = const_cast<char*> (sInput);
}
const String operator+(const char* str) {
//snip
print();
}
void print() {
cout<<string;
}
int search(char* str) {
}
private:
char* string;
int len;
};
哦,我不得不说我试图将方法声明为 String* operator+(const char* str) 和 const String& operator+(const char* str) 而没有改变。 这是我运行它的方式:
int main(int argc, char* argv[]) {
String* testing = new String("Hello, "); //works
testing->print();//works
/*String* a = */testing+"World!";//Error here.
return 0;
}
完整的错误是这样的:
foobar.cc:13: error: invalid operands of types ‘String*’ and ‘const char [7]’ to binary ‘operator+’
我在 Google 和我正在学习的书中查找,但没有成功。 有人有建议吗? (我很确定我在做一些愚蠢的事情,你必须原谅我,我最初是一名 PHP 程序员)任何人都可以指出我错过了什么吗?
最佳答案
您可能不想使用指向您的 String
类的指针。试试这个代码:
int main(int argc, char* argv[]) {
String testing = String("Hello, "); //works
testing.print();//works
String a = testing+"World!";
return 0;
}
为 C++ 类型定义新的运算符时,您通常会直接使用实际类型,而不是指向您的类型的指针。像上面那样分配的 C++ 对象(作为 String testing
)分配在堆栈上(一直存在到“作用域”或函数结束)而不是堆(一直持续到程序结束)。
如果你真的想使用指向你的类型的指针,你可以像这样修改最后一行:
String *a = new String(*testing + "World!");
但是,按照 std::string
的示例,这不是您通常希望使用此类字符串类的方式。
关于C++ : error: invalid operands of types ‘String*’ and ‘const char [7]’ to binary ‘operator+’ ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1317238/