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
4

1 に答える 1

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;

これにより、ループ内でオブジェクトが再定義され、ループの最後で破棄されます。次に、データ メンバーにアクセスしますが、何もしません。多分あなたは探している:valueswhileanotherGame

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

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

structC++ では、型を使用するたびに前に置く必要がないことに注意してくださいgameVar。型名はそのままgameVarです。つまり、宣言を次のように変更できますprocessGamegameVar processGame(gameVar);

于 2013-02-08T20:57:30.573 に答える