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 函数,如另一个答案中所建议的那样
为我的 c++ class 和我 运行 编写这个程序成为一个问题。我的程序读取输入的名称并将其存储到 name
中,然后它想检查 _name
下的正确参数。这是我的 class 及其头文件。
我的错误特别是在 ::setName
下,我想在 ::display()
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 函数,如另一个答案中所建议的那样