繁体   English   中英

C ++:错误:类型'String *'和'const char [7]'到二进制'operator +'的操作数无效

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

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

完整的错误是这样的:

foob​​ar.cc:13:错误:类型'String *'和'const char [7]'到二进制'operator +'的操作数无效

我抬头看谷歌,在我正在学习的书中没有成功。 有建议吗? (我很确定我在做一些愚蠢的事情,你必须原谅我,我原本是一名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的示例,这通常不是您通常想要使用这样的字符串类的方式。

您的operator +是为Stringconst* char定义的,而不是为String* 您应该在添加之前取消引用testing ,即:

String a = (*testing) + "World";

虽然在这种情况下我没有看到在第一个位置测试指针的重点。

编辑:创建没有指针的字符串将如下所示:

String testing = "Hello, ";

要么

String testing("Hello, ");

(两者都是等价的)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM