1

非常に単純なテキスト ベースのゲームを作成しようとしていますが、外部関数から動的構造体にアクセスしようとしたときにエラーが発生しました。ヘッダー ファイルですべての変数と構造体を初期化し、メイン関数で動的割り当てを宣言しました。しかし、それでもエラーが発生しました。何か不足していますか?これは私のコードです。

==================メイン関数「new.cpp」====================

#include <stdlib.h>
#include <iostream>
#include <string>
#include "game.h"
using namespace std;

difficulty _df_1;
player* player_1 = new player[3];
int main()
    {
        //initialize player stats
        player_1->hp = 100;
        player_1->life = 3;
        player_1->mana = 50;
        player_1->player_id = 1;
        player_1->level = 1;
        player_1->player_name= "emmet";
        //..end
        int turn=1;
        cout << "What is your name? <<<";
        getline(cin,player_1->player_name,'\n');
        cout << "Choose a difficulty level: [0]Easy [1]Normal [2]Godlike" << endl;
        int ch;
        cin >> ch;
        switch(ch)
            {
                case 0:
                    cout << "Scardy Cat chose EASY." << endl;
                    break;
                case 1:
                    cout << "A really nice way to start. NORMAL" << endl;
                    break;
                case 2:
                    cout << "Overly Manly Man is playing GODLIKE." << endl;
                    break;
                default:        cout << "I wonder how you can play this game if you can even read simple instructions."<< endl;return 0; break; 
            }
        while(turn == 1)
            {
                char ch;
                cout << "What do you want to do now? \n <<<<"; 
                cin >> ch;
                cin.ignore(5,'\n');
                switch(ch)
                    {
                        case 'a': case 'A':
                            player_stat();
                            break;
                        case 'v': case 'V':
                            cheat_menu();
                            break;
                        case 'x': case 'X':
                            return 0;
                            break;
                        case '`':

                            break;
                        default:    cout << "We were unable to process your request. Please try again" << endl; break;
                    }
            }
        delete player_1;
        return 0;
    }


void cheat_menu()
    {
        cout << "CHEATERS WILL ROT IN THE DEEPEST DEPTHS OF TARTARUS." << endl;
        cout << "Enter Code:" << endl;
        string cheat;
        getline(cin,cheat,'\n');
            if(cheat == "poo")
                {
                    system("sleep 3");
                    cout << "Cheat Activated.." << endl;
                    player_1->hp += 1000;
                    player_1->level += 10;
                    player_1->mana += 1000;
                    player_stat();
                }
            else
                {
                    cout << "Wrong cheat code.." << endl;
                }
        //system("sleep 3");
        //system("clear");
    }

==================メイン関数の終了==============

=======外部関数「player_stat.cpp」===========

#include <iostream>
#include "game.h"
using namespace std;
void player_stat()
    {
        cout << "Name: " << player_1->player_name  << endl
        << "Hp: " << player_1->hp << endl
        << "Life: " << player_1->life << "\t Mana: " << player_1->mana << endl
        << "Level: " << player_1->level << "\t XP: " << player_1->xp
        << endl;
        //system("sleep 3");
        //system("clear");
}

==================外部関数終了==============

==========ヘッダーファイル「game.h」===================

#ifndef _GAME_
#define _GAME_

#include "player_stat.cpp"
using namespace std;

//function prototypes...
void player_stat();
void cheat_menu();


//structs for player and NPC
struct player
    {
        string player_name;
        int life;
        double atk;
        double hp;
        double mana;
        int player_id;
        int level;
        long int xp;
        string weapon_name;
        double weapon_damage;
    };
enum difficulty {EASY,NORMAL,GODLIKE};

#endif

===========エンドヘッダーファイル=======================

これらは私が得たエラーです。int main() で省略されている他の関数は気にしないでください。:P

In file included from game.h:4
from new.cpp
in function `void player_stat()':
`player_1' undeclared (first use in this function)
(Each undeclared identifier is reported only once for each function it appears in.)
At global scope:
`player*player_1' used prior to declaration
4

2 に答える 2

0

追加

extern player* player_1;

game.hへ

これにより、player_1 変数がすべてのモジュールで使用可能になります。

も削除

#include "player_stat.cpp"

ヘッダーファイルにcppファイルを含めることは想定されていません

于 2013-04-25T05:33:42.390 に答える
0

externストレージ指定子を使用して変数を宣言します。

extern player* player_1;

player_1これにより、変数が別の場所で定義されていることがコンパイラーに通知され、リンカーは後でそれを解決します。


また、私が指摘したように、実際には3 つのプレイヤー オブジェクトを割り当てます。1 つだけ必要な場合は、3 つを割り当てないでください。

player* player_1 = new player;

ただし、それも必要ありません。通常の非ポインター変数を宣言しても問題なく機能します。

player player_1;

次に、他のファイルexternで、変数が別の場所で定義されていることをコンパイラに伝えるために使用します。

extern player player_1;
于 2013-04-25T05:35:20.947 に答える