Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c+中赋值运算符和c字符串的问题+;_C++ - Fatal编程技术网

C++ c+中赋值运算符和c字符串的问题+;

C++ c+中赋值运算符和c字符串的问题+;,c++,C++,我正在创建一个类,该类应该能够以与字符串类相同的方式分配c字符串: string a = "My string"; 我遇到的问题是,它似乎不是用于此目的的运算符=(char操作数)。所以我的问题是:用什么来代替 我所拥有的: class exstring { ... public: exstring& operator=( char* ); ... }; ... int main() { exstring test = "test"; }

我正在创建一个类,该类应该能够以与字符串类相同的方式分配c字符串:

string a = "My string";
我遇到的问题是,它似乎不是用于此目的的
运算符=(char操作数)
。所以我的问题是:用什么来代替

我所拥有的:

class exstring
{
    ...

    public:
    exstring& operator=( char* );

    ...
};

...

int main()
{
    exstring test = "test";
}
其中:

main.cpp:9:22: error: conversion from ‘const char [19]’ to non-scalar type ‘std::exstring’ requested

有什么想法吗?

您没有在这里呼叫您的
操作员=
。您需要了解赋值和初始化之间的区别。您所做的是初始化,您需要一个接受您提供的参数的构造函数。换言之:

extring test = "test";
与以下内容完全相同:

extring test("test");

除了在后一种情况下,构造函数可以是显式的,但在前一种情况下则不是。

操作符=
仍然是错误的,因为它使用的是
char*
而不是
const char*
。听起来构造函数(示例中未显示)需要接受
const char*
还有另一个区别。如果复制构造函数是私有的,但有一个可访问的构造函数使用
const char*
第一个定义将失败。从技术上讲,第一种方法相当于调用两个构造函数(优化器可能会选择省略一个)——第二种方法是直接初始化,只调用一个构造函数