Forehand Я хотел бы упомянуть, что я довольно новичок в программировании на C++ и что я использую Ogre3D в качестве рамки (для целей школьного проекта). У меня есть класс Игрок, который наследует от GameObject класс. При попытке построить проект я сталкиваюсь со следующей ошибкой:Неопределенный базовый класс, хотя включает в себя настоящее
Error C2504 'GameObject' : base class undefined - player.h (9)
Что будет означать класс GameObject не определен в заголовочном файле класса игрока. Однако на самом деле я включил заголовочный файл GameObject в файл Player (см. Код ниже). Я знаю, что циркуляр включает в себя код. Однако, если я уйду из них включает в себя я получаю целый список различных ошибок, на которых я не знаю, как и почему они происходят:
Я озадачен этой проблемой в течение нескольких дней в настоящее время и пока не нашли решений по всему Интернету (статья CPlusPlus я в основном консультировался: http://www.cplusplus.com/forum/articles/10627/).
Исходные файлы для перечисленных ниже заголовочных файлов включают только их соответствующие файлы заголовков.
Player.h
#pragma once
#ifndef __Player_h_
#define __Player_h_
#include "GameObject.h"
class Player : public GameObject {
// ... Player class interface
};
#endif
GameObject.h
#pragma once
#ifndef __GameObject_h_
#define __GameObject_h_
#include "GameManager.h"
// Forward declarations
class GameManager;
class GameObject {
// ... GameObject class interface
};
#endinf
Заголовок GameObject включает в себя GameManager как можно видеть.
GameManager.h
#pragma once
// Include guard
#ifndef __GameManager_h_
#define __GameManager_h_
// Includes from project
#include "Main.h"
#include "Constants.h"
#include "GameObject.h" // mentioned circular includes
#include "Player.h" // "
// Includes from system libraries
#include <vector>
// Forward declarations
class GameObject;
class GameManager {
// ... GameManager interface
};
#endif
В довершение там есть Главный класс, который заголовочный файл выглядит следующим образом:
main.h
// Include guard
#ifndef __Main_h_
#define __Main_h_
// Includes from Ogre framework
#include "Ogre.h"
using namespace Ogre;
// Includes from projet headers
#include "BaseApplication.h"
#include "GameManager.h"
// forward declarations
class GameManager;
class Main : public BaseApplication
{
// ... Main interface
};
#endif
С все чтение, которое я сделал по этому вопросу, и другие люди с той же ошибкой, что и я, в состоянии разобраться в этом, но все же безрезультатно. Я надеюсь, что кто-то может потратить время, чтобы помочь мне здесь и указать на какой-либо неисправный код или соглашения.
У вас есть ';' после определения вашего класса? Они отсутствуют – vu1p3n0x
Мои плохие, да, определения классов заканчиваются точкой с запятой. Я отредактирую главный пост соответственно. – Stephan
Нет никакого смысла в том, чтобы включать определение класса и форвард-объявление этого класса. Если форвардного объявления достаточно, удалите include. Если вам нужно определение класса, удалите объявление. – molbdnilo