2015-10-24 47 views
0
struct prediction 
{ 
    int p1; 
    int p2; 
}; 

struct player 
{ 
    vector <prediction> p; 
    int score=0; 
    string name; 
}; 

int winner (player pla, prediction pred, int i) 
{ 
    if (pla.p[i].p1 >= p.p1) 
    { 
     pla.p[i].score +=10; 
     return 1; 
    } 
    return 0; 
} 

錯誤發生在pla.p[i].p1贏家函數錯誤爲p未在此範圍內聲明。我認爲結構中的元素未在此範圍內聲明

問題在於結構playerpredection之間的關係。

任何人都可以找到問題嗎?

+1

你認爲'p'是指'p.p1'嗎? –

+0

您錯誤地識別了錯誤的位置。錯誤信息是關於'> ='後的'p.p1',而不是之前的'pla.p [i] .p1'。分號和逗號之前的空格通常被認爲是不可取的,並且不規則的縮進也是很不理想的。 –

+1

問題出在操作員的另一邊。什麼是'p.p1'應該是?範圍內沒有變量'p'。 – ApproachingDarknessFish

回答

2

我認爲問題是p意味着pred,因爲p沒有在函數中聲明。

int winner (player pla, prediction pred, int i) 
{ 
    if (pla.p[i].p1 >= pred.p1) //changed p to pred 
1

您的代碼存在錯誤。

結構就像一些物體的藍圖。我們可以說這個 對象是怎麼樣的。例如,我們有一座建築物的地圖,這是建築物建造的方式。任何人都可以住在建築物的地圖上嗎?不, ,因爲它只是地圖。結構具有相同的行爲。它就像一個地圖 的一個對象。這個對象看起來像什麼?它將持有哪些變量,它會持有多少內存?結構本身 沒有分配內存,但結構對象保存內存區域 並且可以存儲事物。

在你的代碼中,預測和玩家沒有記憶,只是他們的對象,即pla,pred。所以不要在結構聲明中初始化你的分數變量。你可以爲它做一些構造函數。代碼將如下所示。

struct player 
    { 
    vector <prediction> p ; 
    int score ; 
    string name ; 

    player(){ 
     score = 0; 
    } 
    }; 

另一件事,你沒有引用p指哪裏?這條線對我來說毫無意義。

pla.p[i].score += 10; 

我已經爲你構建了一個代碼,但對你的邏輯仍然有很差的想法。

struct prediction 
{ 
    int p1; 
    int p2; 
}; 
struct player 
{ 
    vector <prediction> p; 
    int score; 
    string name; 

    player() { 
     score = 0; 
    } 
}; 
int winner(player pla, prediction pred, int i) 
{ 
    if (pla.p[i].p1 >= pred.p1) 
    { 
     pla.score += 10; 
     return 1; 
    } 
    return 0; 
} 
+1

你從哪裏得到報價? –

+1

@ M.Awais,int score = 0;會和構造函數做同樣的事情。這是一個C++ 11及以上的功能。 –

+0

@ M.Awais關於作爲藍圖的結構的報價。 –