C++ : error: invalid operands of types ‘String*’ and ‘const char [7]’ to binary ‘operator+’

标签 c++ string operator-overloading

我正在学习 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/

相关文章:

c++ - 如果 char 可以在 C++ 中存储数字,为什么我们需要 int?

java - 字符串拆分错误输出

swift - 从 Swift 中的一系列字符初始化字符串

string - VB 脚本日期格式 "YYYYMMDDHHMMSS"

c++11 - 如何在带有右值的算术表达式中实现 "optimal"运算符重载解析?

c++ - 删除容器类型的运算符==

c++ - 为什么按此顺序评估 '--++a-​-++ +b--'?

c++ - Tensorflow Op : how to include libtensorflow_framework. 所以?

c++ - 声明 vector 的 protected 指针的问题

c++ - 如何使用 CUDA Thrust 执行策略覆盖 Thrust 的低级设备内存分配器