我一直在尝试将保存所有变量的结构传递给多个函数,这些函数保存在单独的类中。我知道该错误最有可能与某种语法错误有关,但我看不出我做错了什么。

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

最佳答案

首先,一个简单的问题:您正在=循环条件中使用while,这会将值'Y'分配给gameVar.anotherGame。您真正想要的是==,以测试是否相等。

看一下这一行:

struct gameVar = runObj.processGame(gameVar);


您想在这里做什么? gameVar是结构的名称,而不是gameVar类型的对象。您的对象实际上称为values。也许您想执行以下操作:

values = runObj.processGame(values);


下一行也一样。

出现这种困惑的原因似乎是因为在创建该类型的对象的同时定义了struct。称为structgameVar只是对象的蓝图,您创建了一个与名为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);

关于c++ - 传递结构错误“'=' token 之前的unqualified-id”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14781201/

10-13 04:59