2013-02-08 73 views
0

我一直在試圖將一個結構保存在我的所有變量中,這個結構保存在一個單獨的類中。我知道這個錯誤與某種語法錯誤有關,很可能,但我不明白我做錯了什麼。傳遞結構錯誤「在'='標記之前的非限定標識」

的main.ccp是:

#include <iostream> 
#include <cstdlib> 
#include <ctime> 
#include <fstream> 
#include "running.h" 

using namespace std; 

int main() 
{ 
    //------Class Objects--------- 
    running runObj; 

    //----------Vars-------------- 

    char saveGame = 'N'; 
    struct gameVar 
    { 
     int correctGuesses; // These vars need to be reset for each new game. 
     int Lives; 
     int rowCorrect; 
     int highScore; 
     char anotherGame; 
    } values; 
    values.highScore = 12; 
    values.anotherGame = 'Y'; 

    //--------Game Loop----------- 

    // int highScore2 = runObj.readHighScore(); 


    while (values.anotherGame = 'Y') 
    { 
     struct gameVar = runObj.processGame(gameVar); 
     struct gameVar = runObj.afterText(gameVar); 
     gameVar values; 
     values.anotherGame; 
    } 


    cout << endl << "-------------------------------------------------------" << endl; 
    cout << "Would you like to save your high score? Y/N" << endl; 
    cin >> saveGame; 

    if(saveGame == 'Y') 
    { 
     runObj.saveHighScore(gameVar); 
    } 

    return 0; 
} 

我的頭文件是:

#ifndef RUNNING_H 
#define RUNNING_H 


class running 
{ 
    public: 
     struct gameVar processGame(struct gameVar); 
     void saveHighScore(struct hs); 
     int readHighScore(); 
     struct gameVar afterText(struct gameVar); 
}; 

#endif // RUNNING_H 

回答

1

首先,一個簡單的問題:你在你的while循環條件使用=,這將分配值'Y'gameVar.anotherGame。你真正想要的是==,以測試平等。

看看這一行:

struct gameVar = runObj.processGame(gameVar); 

什麼是你想在這裏做什麼? gameVar是你的struct的名字,而不是gameVar類型的對象。你的對象實際上被稱爲values。也許你想做類似的事情:

values = runObj.processGame(values); 

同樣也是下一行。

看起來你有這種困惑的原因是因爲你在創建該類型的對象的同時定義了你的struct。該struct稱爲gameVar僅僅是對象的藍圖,並且建立了該藍圖稱爲values匹配的對象:

struct gameVar 
{ 
    // ... 
}; 

struct gameVar 
{ 
    // ... 
} values; 

,如果你定義structmain功能外,你可能不太糊塗

然後在main創建它的實例與:

gameVar values; 

這個values對象,你必須傳遞給一個函數 - 你不能傳遞一個類型,這是什麼gameVar是。

我不知道你隨後嘗試與做:

gameVar values; 
values.anotherGame; 

這將重新定義循環while內的values對象,它會在循環的末尾被銷燬。然後訪問數據成員anotherGame,但不要對它做任何事情。也許你正在尋找:

gameVar values; 
values.highScore = 12; 
values.anotherGame = 'Y'; 

while (values.anotherGame == 'Y') 
{ 
    values = runObj.processGame(values); 
    values = runObj.afterText(values); 
} 

值得一提的是,在C++中,你不需要每次使用gameVar型前放struct。類型名稱只是gameVar。也就是說,您可以將您的processGame聲明更改爲:gameVar processGame(gameVar);

+0

謝謝您的幫助!我認爲我現在對結構有更加堅定的把握,現在結構正在工作。再次感謝你! – ponger3d 2013-02-08 21:20:42

相關問題