传递结构错误“unqualified-id before'='token”

时间:2013-02-08 20:55:15

标签: c++ structure

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

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 个答案:

答案 0 :(得分:1)

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

看看这一行:

struct gameVar = runObj.processGame(gameVar);

你想在这做什么? gameVar是结构的名称,而不是gameVar类型的对象。您的对象实际上称为values。也许你想做类似的事情:

values = runObj.processGame(values);

同样适用于下一行。

您似乎有这种混淆的原因是因为您在创建该类型的对象的同时定义了struct。名为struct的{​​{1}}只是对象的蓝图,您创建的对象与名为gameVar的蓝图相匹配:

values

如果您将struct gameVar { // ... } values; 函数外的struct定义为:

,您可能会感到困惑
main

然后使用:

struct gameVar { // ... }; 中创建它的实例
main

这个gameVar values; 对象必须传递给函数 - 你不能传递一个类型,这就是values

我不确定你当时尝试做什么:

gameVar

这将重新定义 gameVar values; values.anotherGame; 循环中的values对象,它将在循环结束时被销毁。然后,您可以访问数据成员while,但不对其执行任何操作。也许你正在寻找:

anotherGame

值得注意的是,在C ++中,您不需要在每次使用gameVar values; values.highScore = 12; values.anotherGame = 'Y'; while (values.anotherGame == 'Y') { values = runObj.processGame(values); values = runObj.afterText(values); } 类型之前放置struct。类型名称只是gameVar。也就是说,您可以将gameVar的声明更改为:processGame