12

私はこれでどこに行くべきかさえ知りません。Google はあまり役に立ちませんでした。私の前の質問と同じように。TextMate の Command+R を使用してプロジェクトをコンパイルしています。

game.h:16:error: 'Player* HalfSet::Player() const' の宣言</p>

players.h:11:エラー:「プレーヤー」の意味が「クラス プレーヤー」から変更されました</p>

game.h:21:error: 'Player' はタイプではありません

player.h ファイル (部分)

#ifndef PLAYERS_H
#define PLAYERS_H
using namespace std;

#include <string>
#include <vector>
#include <istream>
#include <iomanip>
#include "generics.h"

class Player{ //Line 11
public:
    //getters
    long Id() const;
    string FirstName() const;
    string LastName() const;
    string Country() const;
    //setters
    void setId(long id);
    void setFirstName(string s);
    void setLastName(string s);
    void setCountry(string s);
    //serializing functions
    void display(ostream &out);
    void read(istream &in);
    void write(ostream &out);
    //Initalizers
    Player();
    Player(istream &in);
    Player(string firstName, string lastName);
    Player(string firstName, string lastName, string country);
    Player(long id, string firstName, string lastName, string country);
    ~Player();
private:
    long _id;
    string _firstName;
    string _lastName;
    string _country;
};

game.h ファイル (部分)

#ifndef GAME_H
#define GAME_H

#include "generics.h"
#include "players.h"
#include <string>
#include <vector>
#include <istream>
#include <iomanip>

using namespace std;

class HalfSet{
public:
    //getters
    Player* Player() const; //Line 16
    int GamesWon() const;
    int TotalPoints() const;
    int Errors() const;
    //setters
    void setPlayer(Player* p);
    void setGamesWon(int games);
    void setTotalPoints(int points);
    void setErrors(int errors);
    //Serialization
    void display(ostream &out) const;
    void read(istream &in) const;
    void write(ostream &out) const;
    //Initalizers
    HalfSet();
    ~HalfSet();
private:
    Player* _player;
    int _gamesWon;
    int _points;
    int _errors;
};

ここで何が起こっているのですか?

4

4 に答える 4

17

C++ では、関数に class/struct/typedef と同じ名前を付けることはできません。「Player」という名前のクラスがあるため、HalfSet クラスには「Player」(「Player *Player()」) という名前の関数があります。これらのいずれかの名前を変更する必要があります (おそらく、HalfSet の Player() を getPlayer() などに変更します)。

于 2008-11-12T02:26:43.513 に答える
10

あなたの問題は、名前がスコープで検索されることです。の宣言内でHalfSet::setPlayer(Player*)、非修飾名Playerを検索する必要があります。最初に試したスコープは ですclass HalfSet。そのスコープでは、 のルックアップはではなくPlayerfunction を見つけます。HalfSet::Playerglobal class ::Player

解決策は、修飾名を使用すること::Playerです。これは、ルックアップ (グローバル) に使用するスコープをコンパイラに通知します。これは、HalfSet::Player考慮されていないことを意味します。

于 2008-11-12T09:57:06.083 に答える