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

C++ Expression must be a modifiable lvalue

为我的 c++ class 和我 运行 编写这个程序成为一个问题。我的程序读取输入的名称并将其存储到 name 中,然后它想检查 _name 下的正确参数。这是我的 class 及其头文件。

我的错误特别是在 ::setName 下,我想在 ::display()

下检查或设置带有 _name 的输入名称以正确输出

PhoneNumber.cpp

using namespace oop244;


    void PhoneNumber::display() const{
        cout << "name: " << _name << ", Phone number: (" << _areacode << ") " << _localNumber / 10000 << "-" << _localNumber % 10000 << endl;
    }

    bool PhoneNumber::isValid() const
    {
        if (correctNum == false && correctArea == false){
            cout << _name << " does not have a valid phone number." << endl;
            return false;
        }
        else{
            return true;
        }

    }
    void PhoneNumber::setName(const char name[])
    {
        cout << name << endl;

        _name = name;
    }

PhoneNumber.h

#define MAX_NAME_LENGTH 40
#define PHNO_MAX  999999
#define PHNO_MIN 100000
#define AREACODE_MIN 100
#define AREACODE_MAX  999
namespace oop244{

    class PhoneNumber{


    private:
        char _name[MAX_NAME_LENGTH + 1];
        int _areacode;
        int _localNumber;
        bool _validPhoneNumber;
    public:

        void setName(const char name[]);
        void setPhoneNumber(int areaCode, int number);
        void display() const;
        bool isValid() const;


    };
};

您不能分配原始数组。您需要复制内容。

假设你的 class 老师强迫你使用字符数组,你可以使用 strncpy 来复制字符:

strncpy(_name, name, MAX_NAME_LENGTH);

为此你需要#include <cstring>

如果你的 class 老师允许,最好使用 std::array<char,MAX_NAME_LENGTH> 甚至 std::string。两者都可以通过分配复制。

使用标准字符串

#include <string>

并使用

std::string _name;

在您的 class 声明中而不是

char _name[MAX_NAME_LENGTH + 1];

或者使用 c 风格的 str 函数,如另一个答案中所建议的那样