因此,基本上,起初我想使用get
方法更改CSubject“AE”的值,但是,在看到有关它的一些文档之后,这样做会导致诸如“表达式必须是可修改的左值”之类的错误。所以这是不可能的。
对于类似的情况,在这种情况下,我们可以使用set
方法,这就是我所做的。
但是,在编译之后,我不断出现错误:
这是为什么?
class CSubject
{
public:
CSubject() = default;
CSubject(std::string m_Name,unsigned m_SubjNr);
void setName(std::string m_Name){ Name= m_Name;}
std::string getName(){return Name;}
private:
unsigned SubjNr;
std::string Name;
};
int main()
{
CSubject a("test",3);
a.setName("Testing");
cout << a.getName();
return 0;
}
最佳答案
您已经声明了一个带有CSubject
和std::string
参数的unsigned
构造函数,但从未为其提供实际定义!因此,当编译的代码中不存在该(使用的)构造函数时,链接器将失败。
要解决此问题,请添加该构造函数的“内联”定义,如下所示(使用简洁的初始化列表):
class CSubject {
public:
CSubject() = default;
CSubject(std::string m_Name, unsigned m_SubjNr) : SubjNr{ m_SubjNr }, Name{ m_Name } {}
void setName(std::string m_Name) { Name = m_Name; }
std::string getName() { return Name; }
private:
unsigned SubjNr;
std::string Name;
};
或者,保持类声明不变,您可以在代码的其他位置提供构造函数的“体外”定义,如下所示(此处使用“旧式”长成员初始化):CSubject::CSubject(std::string m_Name, unsigned m_SubjNr)
{
Name = m_Name;
SubjNr = m_SubjNr;
}
使用一个或另一个,但不能同时使用!关于c++ - C++:表达式必须是可修改的左值,然后是对类的 undefined reference ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64978018/