错误:未在此范围内声明'object'

error: 'object' was not declared in this scope

本文关键字:object 声明 范围内 错误      更新时间:2023-10-16

我是c++的新手,正在尝试制作大富翁游戏。不幸的是,它仍然显示了两个类之间声明的错误。我已经试过了所有的东西,真的不知道问题出在哪里。

错误:未在此作用域中声明"Player"。

发动机.h

#ifndef ENGINE_H
#define ENGINE_H
#include "Player.h"
#include <vector>
using namespace std;
class Engine{
public:
Engine(); // method that starts with game, take random number for getting number of players, set players to vector
void play(); // method where players are playing.
bool returnBalance(int a_money) const; // method that return True, if the players has still some amount on account, False otherwise
bool isWinner();
int setBalance(); // method that set curretn player amount
void printWinner(); // method that print winter of the game
void payBills(int amount); // player pay any bills with this method
virtual ~Engine();
private:
vector<Player*> players;
int i_player;
int balance;
int currentPlayer;
};
#endif /* ENGINE_H */

Engine.cpp

#include "Engine.h"
#include <iostream>
#include <stdlib.h>
using namespace std;
Engine::Engine() {
int numPlayers = rand()*(6-2)+2;
for (int i = 0; i <= numPlayers; i++){
Player* p = new Player;
players.push_back(p);
}
cout << players.size() << endl; 
int p_index = 0; 
for(int i = 1; i <= players.size(); i++){
p_index = i;
p_index++;
cout << p_index ;
}
currentPlayer = p_index;     
cout << "Welcome to MonOOpoly game, the game will be played in the same order you already are." << endl;
}
void Engine::play() {
do{
}while(!isWinner());
}
bool Engine::isWinner(){
int count = 0;
for(int i = 1; i <= players.size(); i++){
if(players[i]->getAmount() > 0)
count++; 
}
if(count <= 1)
return true;
return false;
}
int Engine::setBalance(){
int amount = players[currentPlayer]->amount;
return players[currentPlayer]->amount;
}
bool Engine::returnBalance(int a_money) const{
if (players[currentPlayer]->amount < a_money)
return false;
else 
return true;
}
void Engine::payBills(int amount) {
players[currentPlayer]->amount = players[currentPlayer]->amount - amount;
}
void Engine::printWinner() {
int winner = 0;
int newWinner = 0;
for(int i = 1; i <= players.size(); i++){
if(players[i] > 0){
winner = players[i]->getAmount();
if(newWinner < winner)
newWinner = winner;
}
}
cout << "Winner of the game MonOOpoly is: " << newWinner << endl;
}
Engine::~Engine() {
}

Player.h

#ifndef PLAYER_H
#define PLAYER_H
#include "Engine.h"
#include <string>
using namespace std;
class Player {
friend class Engine;
public:
Player(); // constructor
int getAmount() const; // return how much of amount the player has yet
void setAmount(int a); // set amount
int getPosition() const; // return position of the player
void setPosition(int p); // to set position
virtual ~Player(); // destructor
private:
int position; // the position of the player
int amount; // the total amount
};

#endif /* PLAYER_H */

播放器.cpp

#include <iostream>
#include <stdlib.h>
#include "Player.h"
using namespace std;
Player::Player() {
amount = 5000;
position = 0;
}
int Player::getAmount() const {
return amount;
}
void Player::setAmount(int a) {
amount = a;
}
int Player::getPosition() const {
return position;
}
void Player::setPosition(int p) {
position = p;
}
Player::~Player() {
}

您的头中有循环包含,这可能会导致您看到的编译器问题。Engine.h包括Player.h,Player.h包括Engine.h

您应该:

  • #include Player.h从Engine.h移动到Engine.cpp
  • 在Engine.h(带有class Player;)行中正向声明Player类

Forward声明在这里很有用,因为Engine.h只需要知道某个Player类的存在,而不需要知道它的整个定义,因为它只定义了指向该类的简单指针向量。