Witam. Podczas kompilacji programu mam masę problemów, właściwie nie wiedząc z czym. Staram się właśnie wprowadzić nową klasę, z której dziedziczyłyby klasy CSnake, CCheese, CMouse Oto moje pliki .h:
wprowadzana klasa CGameOBject:
// Class automatically generated by Dev-C++ New Class wizard
#pragma once
#ifndef CGAMEOBJECT_H
#define CGAMEOBJECT_H
#include "CGameObject.h"
/*
* basic game object class, further objects will inherit from this one
*/
class CGame;
class CGameObject
{
public:
// class constructor
CGameObject();
// class destructor
virtual ~CGameObject();
/*
virtual void Move()= 0;
virtual void CheckForCollision()= 0;
virtual void AfterMove()= 0;*/
private:
CGame * game;
};
#endif // CGAMEOBJECT_H
i klasy dziedziczące:
CSnake.h
#pragma once
#include "definitions.h"
#include "ccheese.h"
#include "cpoint.h"
#include "cbendpoint.h"
#include "cgameobject.h"
#ifndef SNAKE_DATA_H
#define SNAKE_DATA_H
#include "graphics.h"
#include <deque>
class CSnake: public CGameObject
{ //tutaj dlugio kod, mylse, ze jest nieistotny wiec wycinam};
#endif // SNAKE_DATA_H
podobnie wqyglądają CMouse.h i CCheese.h
Mam też klasę CGame , plik .h:
// Class automatically generated by Dev-C++ New Class wizard
#pragma once
#include "graphics.h"
#include <iostream>
#include <vector>
#include <ctime>
#include "snake_data.h"
#include "mouse.h"
#include "ccheese.h"
#include "definitions.h"
#include "cpoint.h"
#include "cgameobject.h"
#ifndef CGAME_H
#define CGAME_H
class Snake; // one snake
class Cheese; //and one cheese for the mouse
class Mouse; //one mouse
/*
* Class that will deal with all the 'gaming' stuff
*/
class CGameObject;
class CGame
{
public:
// class constructor
CGame();
// class destructor
~CGame();
int randomvalue(int starting, int ending);
void GamePhysics();
void Play();
void InitScreen();
private:
CSnake Snake; // one snake
CCheese Cheese; //and one cheese for the mouse
CMouse Mouse; //one mouse
CGameObject * objects[3];
};
#endif // CGAME_H
W wyniku klompilacji otrzymuję mase błędów mówiących mi o tym, że klasy dziedziczące z CGameObject nie sa zdefiniowane(ja tak to przynajmniej rozumiem):
1>------ Rebuild All started: Project: bgi, Configuration: Debug Win32 ------
1>Deleting intermediate and output files for project 'bgi', configuration 'Debug|Win32'
1>Compiling...
1>snake_data.cpp
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\mouse.h(18) : error C2504: 'CSnake' : base class undefined
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\mouse.h(42) : error C2061: syntax error : identifier 'CCheese'
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\CGame.h(39) : error C2146: syntax error : missing ';' before identifier 'Snake'
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\CGame.h(39) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\CGame.h(39) : error C2208: 'Snake' : no members defined using this type
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\CGame.h(40) : error C2146: syntax error : missing ';' before identifier 'Cheese'
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\CGame.h(40) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\CGame.h(40) : error C2208: 'Cheese' : no members defined using this type
1>mouse.cpp
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\CGame.h(39) : error C2146: syntax error : missing ';' before identifier 'Snake'
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\CGame.h(39) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\CGame.h(39) : error C2208: 'Snake' : no members defined using this type
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\CGame.h(40) : error C2146: syntax error : missing ';' before identifier 'Cheese'
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\CGame.h(40) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\CGame.h(40) : error C2208: 'Cheese' : no members defined using this type
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\CGame.h(41) : error C2146: syntax error : missing ';' before identifier 'Mouse'
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\CGame.h(41) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\CGame.h(41) : error C2208: 'Mouse' : no members defined using this type
1>.\mouse.cpp(124) : warning C4018: '<' : signed/unsigned mismatch
1>main.cpp
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\mouse.h(18) : error C2504: 'CSnake' : base class undefined
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\mouse.h(42) : error C2061: syntax error : identifier 'CCheese'
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\CGame.h(39) : error C2146: syntax error : missing ';' before identifier 'Snake'
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\CGame.h(39) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\CGame.h(39) : error C2208: 'Snake' : no members defined using this type
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\CGame.h(40) : error C2146: syntax error : missing ';' before identifier 'Cheese'
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\CGame.h(40) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\CGame.h(40) : error C2208: 'Cheese' : no members defined using this type
1>cpoint.cpp
1>cgameobject.cpp
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\ccheese.h(16) : error C2504: 'CGameObject' : base class undefined
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\snake_data.h(43) : error C2504: 'CGameObject' : base class undefined
1>cgame.cpp
1>.\cgame.cpp(39) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> E:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\stdio.h(366) : see declaration of 'sprintf'
1>.\cgame.cpp(25) : warning C4101: 'i' : unreferenced local variable
1>.\cgame.cpp(55) : error C2228: left of '.size' must have class/struct/union
1> type is 'CGameObject *[3]'
1>ccheese.cpp
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\snake_data.h(43) : error C2504: 'CGameObject' : base class undefined
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\snake_data.h(75) : error C2061: syntax error : identifier 'CCheese'
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\mouse.h(42) : error C2061: syntax error : identifier 'CCheese'
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\CGame.h(40) : error C2146: syntax error : missing ';' before identifier 'Cheese'
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\CGame.h(40) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\makro\cp\snake cv++\snake na vc++ -wersja robocza\CGame.h(40) : error C2208: 'Cheese' : no members defined using this type
1>cbendpoint.cpp
1>Generating Code...
1>Build log was saved at "file://c:\makro\cp\snake cv++\snake na VC++ -wersja robocza\Debug\BuildLog.htm"
1>bgi - 34 error(s), 3 warning(s)
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========
Proszę, pomóżcie. Błędy dotyczą momentów, kiedy klasy dziedziczą od CGameObject - czyli potrzebna jest pełna definicja klasy(jak mniemam), ale takze uzywania wskaźników do obiektów klasy(a tutaj potrzeba tylko deklaracji). Kilka dni już szukam przyczyny, powstawiałem do plików po dwa strazniki nagłówków, w nagłówkach używam tylko wskaźników do klas, a i tak ciągle to samo...