C++ 非常量引用的初始化无效

C++ 非常量引用的初始化无效,c++,visual-c++,C++,Visual C++,我试图引用一个类变量,它是一个向量,并改变向量的值。我犯了这个错误。我做错了什么?提前谢谢。(“pick”只是一个int。) 我认为您的错误在vector&temp=vector()行中。但是,您在这里执行的操作并不十分清楚,因为您尝试分配&temp,然后立即在if-else语句的分支中重新分配它。引用无法重新分配,您正在声明它,然后在if中将其设置为新值 在这种情况下,我认为您不应该尝试使用引用。引用是不可分配的,只可构造的。你可以试着做: vector<int>& tem

我试图引用一个类变量,它是一个向量,并改变向量的值。我犯了这个错误。我做错了什么?提前谢谢。(“pick”只是一个int。)


我认为您的错误在
vector&temp=vector()
行中。但是,您在这里执行的操作并不十分清楚,因为您尝试分配
&temp
,然后立即在if-else语句的分支中重新分配它。

引用无法重新分配,您正在声明它,然后在
if
中将其设置为新值


在这种情况下,我认为您不应该尝试使用引用。

引用是不可分配的,只可构造的。你可以试着做:

vector<int>& temp = ( player == 1 ) ? this->value1 : this->value2;
vector&temp=(player==1)?此->值1:此->值2;
更新:


对于更新后的代码,您所要做的就是在
temp
中删除
const
,使其正常工作。请注意,您有左值,右值中的r不是来自引用,而是来自右侧,如表达式右侧的可用值。

一旦引用被初始化,就不能重新初始化或赋值

看起来您正在尝试使用以下方法执行此操作:

pick
这里是一个方法,而不是
int


如果您使用
g++
进行编译,我建议启用(至少)
-Wshadow
,当您犯此类错误时,它会发出警告。对于
sum15

您也做了同样的事情,为什么定义了对该
向量的引用?嗨,我刚刚更新了代码。我只是想简化原始代码。我想做的是将this->value1或this-value2赋值给一个临时变量。如果n==1,则temp=this->value1。else temp=此->值2。如果
this->value1
this->value2
已经是向量,并且您希望稍后使用其中一个向量的引用,那么k-ballo上面的答案应该完全符合您的要求。请注意,只有当this->value1()和this->value2()返回左值时,这才有效,由于不能将右值绑定到非常量引用。value1和value2存储整数,因此必须将temp设置为实
向量
,而不是引用,即
向量temp((player==1)?this->value1():this->value2())。请注意,这样做将导致复制向量,但如果希望temp为非常量且value1()/value2()通过valueerror返回,则无法避免:调用“(std::vector)()时不匹配。我在vector temp((player==1)?this->value1():this->value2())和成员的无效使用(是否忘记了“&”?)对于温度[pick-1]=值[pick-1]@JE4如果您可以发布
value1
value2
value
的函数原型/成员声明,这将有所帮助。。。从这个错误看来,它们似乎是变量,而不是函数,所以您需要
向量温度((player==1)?this->value1:this->value2)
@ihm-声明时必须分配一个引用。之后,您将无法重置对另一个对象()的引用。看看K-ballo的答案,这可能是目前代码最简单的修复方法,无需重新构造代码。虽然我建议您考虑一下代码结构,但为什么您要单独存储玩家的分数,为什么不在
player
对象中添加向量?非常感谢。我现在明白了。在这种情况下,我应该使用什么?上面的代码给了我这个错误。tic.h:在成员函数'void tic::WLD(int&'):tic.h:27:错误:调用'(std::vector)('tic.h:27:错误:调用'(std::vector)('tic.h:28:错误:成员的使用无效(是否忘记了'&'))tic.h:28:错误:成员的使用无效(是否忘记了'&'?)tic.h:29:错误:调用'tic::sum15(const std::vector&')没有匹配的函数。tic.h:23:注意:候选函数是:bool tic::sum15(std::vector&)。这里有两个问题。1:您有太多名为
pick
的标识符。2:
sum15()
采用非
const
引用,而它可能采用
const
引用。谢谢,john。我正在改变它们。你有AIM、谷歌聊天或其他服务吗?@ihm:我没有私人咨询服务。也许我应该:-)
    if (player==1)  
    {       
        value1[pick-1]=value[pick-1];   //input values

        if (sum15(this->value1))    //if any sum of 3 is 15
            {
                cout<<"PLAYER1 WINS!"<<endl;
                return 0;
            }
    }
    else  
    {
        value2[pick-1]=value[pick-1];

        if (sum15(this->value2))
        {
            cout<<"PLAYER2 WINS!"<<endl;
            return 0;
        }
    }
tic.h: In member function ‘void tic::WLD(int&)’:
tic.h:28: error: invalid use of member (did you forget the ‘&’ ?)
tic.h:28: error: invalid use of member (did you forget the ‘&’ ?)
vector<int>& temp = ( player == 1 ) ? this->value1 : this->value2;
const vector<int>& values = (player == 1) ? value1 : value2;
int pick(int &m);