作为左操作数的赋值需要左值?

时间:2013-04-27 23:14:14

标签: c++ class

#include <iostream>
using namespace std;

string itmCndtn,itemName;
int strtPrice,sellValue,numRelist,optn=0;

class CBAY_ITEM
{
    string enterName();
    string enterCondition();
    int enterStrtPrc();
    int enterSellVal();  
};

CBAY_ITEM infoClass;
CBAY_ITEM *nPointer=NULL;


int main()
{
    int optionChosen=0;
    int strtPrcTemp=0,sellValueTemp=0;
    do
    {
        cout << "\nPlease Enter a Choice From the Menu.\n"<<endl;
        cout << "\n1.Add an Item to Selling Queue.\n2.Put Item for Sale.\n3.Show Me the Money.\n4.Exit." << endl;
        cin>>optionChosen;
        switch(optionChosen)
        {
        case 1:
        {
            nPointer=new CBAY_ITEM;
            nPointer->enterName()=infoClass.enterName();
            nPointer->enterCondition()=infoClass.enterCondition();
            nPointer->enterStrtPrc()=infoClass.enterStrtPrc();
            nPointer->enterSellVal()=infoClass.enterSellVal();

        }
        case 2:
        {

        }
        case 3:
        {

        }

        }

    }while(optionChosen!=4);

    return 0;
}

这是我的代码到目前为止,我省略了类中函数的定义,因为它似乎不是问题所在。当我尝试编译时,编译器显示错误说

lvalue required as left operand of assignment. 

我不确定它想说的是什么。

nPointer->enterStrtPrc()=infoClass.enterStrtPrc();
nPointer->enterSellVal()=infoClass.enterSellVal();

应该返回int值并将它们存储在动态创建的类infoClass中。

2 个答案:

答案 0 :(得分:2)

更改您的成员函数以返回引用:

struct CBAY_ITEM
{
    string & enterName();
    string & enterCondition();
    int & enterStrtPrc();
    int & enterSellVal();
};

(并且还获得了正确的访问控制权。)

答案 1 :(得分:0)

nPointer-&gt; enterStrtPrc()是一个返回rvalue的表达式。说数字5.你不能分配它 - 它和5=infoClass.enterStrtPrc();

一样合理

如果您要更改要引用的返回类型,正如@Kerrek SB建议的那样,它将返回存储,您可以在其中放置所需的值。