簡體   English   中英

非const引用的初始化無效

[英]invalid initialization of non-const reference

我試圖引用一個類變量,它是一個向量並更改向量的值。 我收到了這個錯誤。 我究竟做錯了什么? 提前致謝。 (“pick”只是一個int。)

 class tic
{
private:
vector<int> move;   //calculate moves
vector<int> value1; //player1's points
vector<int> value2; //player2's points
vector<int> value;  //exchange value
vector<string> board;   //numbers on the board
public:
void setboard ();   //output numbers on the board
void setvalue();    //each number's value corresponding to the numbers on the board
void setvalue12();  //values of player1 and playe2
void set(); //setboard, setvalue, setvalue12
void printboard (int &pick); //print board
int pick(int &m);       //pick a number on the board
bool sum15 (vector<int> &sum15);  //check if sum is 15 of any combination of 3
int WinLoseDraw (int &pick, int player);    //win=0, continue=1, draw=20
void WLD(int &player)
{   
    vector<int> &temp=(player==1)?this->value1:this->value2;
    temp[pick-1]=value[pick-1]; //input values
    if (sum15(temp))    //if any sum of 3 is 15
    {
        cout<<"WINS!"<<endl;
    }
}

};

這是原始代碼。 我試圖簡單地使用成員函數或名為WLD的內聯函數來完成此部分

    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;
        }
    }

使用更新的代碼。 我在“temp [pick-1] = value [pick-1]上得到了錯誤;

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放在temp以使其工作。 請注意,您有左值右值R不是來自引用 ,但是從權利 ,在表達式的右邊使用。

我認為你的錯誤在vector<int> &temp=vector<int>()行中。 但是,由於您嘗試分配&temp然后立即在if-else語句的分支中重新分配,因此不清楚您在這里做了什么。

參考不能被重新分配,你聲明,然后在你的if將其設置為一個新值。

在這種情況下,我認為你不應該嘗試使用引用。

初始化參考后,無法重新初始化或分配。

看起來你正在嘗試使用三元(或條件)運算符

const vector<int>& values = (player == 1) ? value1 : value2;

你說:

(“pick”只是一個int。)

你的代碼說:

int pick(int &m);

pick這里是一個方法 ,而不是一個int

如果你正在使用g++編譯,我建議啟用(至少) -Wshadow ,當你犯這種錯誤時會發出警告。 你用sum15完成了同樣的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM