C++ 类表达式必须是可修改的左值

Zia*_*mar 3 c++ constructor class

我有以下代码

#include<iostream>
#include<fstream>
using  namespace std;
const int MAX_ARRAY = 26;
class canvas{
private:
    char painting[MAX_ARRAY][MAX_ARRAY];
    char fileName[10];
public:
    canvas(){
        fileName = "zzz.txt";
    }

};
Run Code Online (Sandbox Code Playgroud)

但是fileName = "zzz.txt"给出的语法错误是

Expression must be a modifiable lvalue
Run Code Online (Sandbox Code Playgroud)

Vau*_*ato 5

通常,您希望使用初始化列表来初始化构造函数中的成员:

canvas()
: fileName("zzz.txt")
{
}
Run Code Online (Sandbox Code Playgroud)

当你这样做时:

fileName = "zzz.txt";
Run Code Online (Sandbox Code Playgroud)

您试图为数组赋值,这是不合法的。您可以使用值初始化数组,但之后不能为其分配值(作为一个整体)。初始化列表语法允许您使用正确的值对其进行初始化。

但是,如果您使用的是较旧的编译器,则可能必须strcpy改用:

strcpy(fileName,"zzz.txt");
Run Code Online (Sandbox Code Playgroud)

对于其他可以赋值的类型,使用 initializer-list 语法并不是绝对必要的,但它通常仍然是一个好主意。

此外,正如其他人所指出的,除非您有充分的理由不这样做,否则最好使用 astd::string而不是原始字符数组。Astd::string将允许任意长度的字符串,可以将其视为常规值。