2013-02-08 3 views
0

Я пытаюсь передать структуру, содержащую все мои вары, в несколько функций, которые сохраняются в отдельном классе. Я знаю, что ошибка связана с какой-то синтаксической ошибкой, скорее всего, но я не вижу, что я сделал неправильно.Ошибка передачи ошибки «unqualified-id before» = 'token "

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 - это имя вашей структуры, а не объект типа gameVar. Фактически ваш объект называется values. Возможно, вы хотели сделать что-то вроде:

values = runObj.processGame(values); 

То же и для следующей строки.

Похоже, причина, по которой у вас возникает эта путаница, заключается в том, что вы определяете свой struct одновременно с созданием объекта такого типа. struct называется gameVar просто план для объектов и создать объект, который соответствует этой план под названием values:

struct gameVar 
{ 
    // ... 
} values; 

Вы могли бы быть менее запутаться, если вы определяете struct вне функции main как:

struct gameVar 
{ 
    // ... 
}; 

А затем создать экземпляр этого в main с:

gameVar values; 

Это объект values, который вы должны передать функции - вы не можете передать тип, что и есть gameVar.

Я не уверен, что вы тогда пытались сделать с:

gameVar values; 
values.anotherGame; 

Это переопределитьvalues объекта в пределах цикла while и он будет уничтожен в конце цикла. Затем вы получаете доступ к элементу данных anotherGame, но ничего не делайте с ним. Может быть, вы ищете:

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

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

Стоит отметить, что в C++, вам не нужно ставить struct перед каждым использованием gameVar типа. Имя типа только gameVar. То есть вы можете изменить свое заявление от processGame по адресу: gameVar processGame(gameVar);

+0

Благодарим за помощь!Я думаю, что теперь я более твердо разбираюсь в структурах, и теперь у меня работают структуры. Еще раз спасибо! – ponger3d