簡體   English   中英

在另一個類中創建類指針的向量?

[英]Creating a vector of class pointers inside another class?

我遇到了我創建的兩個類的問題。 這是一個簡單的運動賽季計划。 我創建了一個稱為Season的類,該類創建指向Game對象的指針的向量。 即使我已經定義並測試了類是否有效,編譯器仍在抱怨Game是未聲明的標識符。

Game類為什么不能在Season類中使用,或者如何才能使用它們(也許將其嵌套在Season的公共部分中,不知道這是好是壞)?

class Season
{
public:
    Season();
    void add_game(int number, string a, int a_score, string b, int b_score);

private:
    vector<Game*> games;
    int game_high_score;
    string game_high_score_team;
    int season_high_score;
    string season_high_score_team;
    string champion;
};

Season::Season()
{
    int game_high_score = -2;
    string game_high_score_team = "Unknown";
    int season_high_score = -2;
    string season_high_score_team = "Unknown";
    string champion = "Unknown";
}

void Season::add_game(int number, string a, int a_score, string b, int b_score)
{
    Game* temp_game = new Game(number, a, b, a_score, b_score);
    games.push_back(temp_game);
}

string Season::toStr() const
{
    stringstream out;

    out << "Number of games in the season: " << games.size() << endl
        << "game_high_score_team: " << game_high_score_team
        << "\tScore: " << game_high_score_team << endl
        << "season_high_score: " << season_high_score
        << "\tScore: " << season_high_score << endl
        << "champion: " << champion << endl;

    return out.str();
}

// Game class stores values and has functions for each game of the season
class Game
{
public:
    Game();
    Game(int number, string a, string b, int a_score, int b_score);
    string winner(string a, string b, int a_score, int b_score);
    string toStr() const;
    string get_team_a() const;
    string get_team_b() const;
    int get_team_a_score() const;
    int get_team_b_score() const;
    string get_winner() const;
    int get_top_score() const;

private:
    int game;
    string team_a;
    string team_b;
    int team_a_score;
    int team_b_score;
    string won;
    int top_score;
};

Game::Game()
{
    game = -1;
    team_a = "";
    team_b = "";
    team_a_score = -1;
    team_b_score = -1;
    won = "";
    top_score = -1;
}

Game::Game(int number, string a, string b, int a_score, int b_score)
{
    game = number;
    team_a = a;
    team_b = b;
    team_a_score = a_score;
    team_b_score = b_score;
    won =  winner(team_a, team_b, team_a_score, team_b_score);
}

string Game::winner(string a, string b, int a_score, int b_score)
{
    if (a_score > b_score)
    {
        top_score = a_score;
        return a;
    }
    else if (a_score < b_score)
    {
        top_score = b_score;
        return b;
    }
    else
    {
        top_score = a_score;
        return "Tie";
    }
}

string Game::toStr() const
{
    stringstream out;

    out << "Game #" << game << endl
        << "team_a: " << team_a << "\tScore: " << team_a_score << endl
        << "team_b: " << team_b << "\tScore: " << team_b_score << endl
        << "Won: " << won << "\t TopScore: " << top_score << endl;
    return out.str();
}

int main(int argc, char* argv[])
{
    string file_name;
    Season sport;
    file_name = "season.txt"

    ifstream fin(file_name);
    if (fin.fail())
    {
        cout << "Could not read file: " << file_name << endl;
    }

    if (fin.is_open())
    {
        string temp;
        getline(fin, temp);

        int game;
        string a;
        string b;
        int a_score;
        int b_score;
        while (!fin.eof())
        {
            fin >> game >> a >> a_score >> b >> b_score;
            sport.add_game(game, a, b, a_score, b_score);
        }

        // close the input stream from the file.
        fin.close();
    }

    system("pause");
    return 0;
}

編譯器從頭開始逐行讀取程序。 在您第一次參考Game

vector<Game*> games

您尚未聲明Game

您必須在Season之前移走Game聲明,或者必須向前聲明 Game

要向前聲明Game ,請在Session定義之前添加以下聲明:

class Game;

定義Season ,仍然沒有有關Game類的未來定義的信息。 您必須在Season之前提前聲明Game

class Game;

這將允許您在允許使用不完整類型的上下文中使用它。 首先,在Season之前定義Game可能更有意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM