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

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

因此,基本上,起初我想使用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;
}

最佳答案

您已经声明了一个带有CSubjectstd::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/

10-12 16:16