problēma ar #include

Vēlies radīt spēli, bet nezini ar ko sākt? Sperot pirmos soļus, vari meklēt padomu šeit
Post Reply
Message
Author
User avatar
kristapuciitis
Posts: 163
Joined: 03 Jun 2011, 14:22

problēma ar #include

#1 Post by kristapuciitis » 04 Mar 2012, 16:52

Sveiki!
Man ir kaut kāda kļūda. Man ir fails player.h

Code: Select all

#ifndef _PLAYER_H_
#define _PLAYER_H_

#include <SFML/System.hpp>
#include <SFML/Graphics.hpp>

#define PLAYER_WIDTH 30
#define PLAYER_HEIGHT 70

enum Direction
{
	left = -1,
	right = 1
};

class Player
{
public:
	sf::Vector2<float> Position;
	void Initialize(sf::Vector2f position);
	void Update(sf::Time time);
	void Draw(sf::RenderWindow* window);
private:
	float acceleration, maxSpeed;
	sf::Vector2f velocity;
	Direction direction;
};

#endif
un level.h

Code: Select all

#ifndef _LEVEL_H_
#define _LEVEL_H_

#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>

#include "cell.h"
#include "player.h"

#define LEVEL_WIDTH_MAX 80
#define LEVEL_HEIGHT_MAX 30

#define CELL_WIDTH 40
#define CELL_HEIGHT 40

class Level
{
public:
	Level(sf::RenderWindow* window);
	void LoadFromFile(const char* fileName, Player* player);
	void Draw();

	Cell Cells[LEVEL_WIDTH_MAX][LEVEL_HEIGHT_MAX];
	unsigned width, height;

private:
	sf::RenderWindow* _window;
};

#endif
Kā redzams, funkcijas Level::LoadFromFile() pieprasa pointeri uz Player, bet Player klasē nav funkciju, kas pieprasa pointeri uz Level. Tiklīdz player.h failā ierakstu #include "level.h" nerāda, ka ir error, bet, kad kompilēju, tad parādās error C2061: syntax error : identifier 'Player' . Kur ir problēma? Error apraksts nav saprotams.
Gooby pls

snake5
Posts: 361
Joined: 07 Dec 2010, 03:54
Contact:

Re: problēma ar #include

#2 Post by snake5 » 04 Mar 2012, 17:21

Kāds error ir tad, kad kompilē kodu tādu, kāds tas ir?
error C2061: syntax error : identifier 'Player'
..nozīmē to, ka Player nav definēts. Radās tieši no tā, ka iekļāvi pirmo failu otrajā UN otro pirmajā. Kad kompilēts tiek player.cpp, player.h ievelk iekšā level.h (kurš prasa Player klasi) pirms definē Player klasi.

User avatar
kristapuciitis
Posts: 163
Joined: 03 Jun 2011, 14:22

Re: problēma ar #include

#3 Post by kristapuciitis » 04 Mar 2012, 17:28

Nu labi, kā man panākt, lai tāds errors nebūtu?
Gooby pls

atis
Posts: 57
Joined: 30 Nov 2011, 01:08

Re: problēma ar #include

#4 Post by atis » 04 Mar 2012, 17:39

Ja tev ir divas klases/struktūras, kas satur pointerus viena uz otru, tad tā vietā lai iekļautu visu pilno definīciju ar #include, vari ielikt forward deklarāciju šādā veidā:

Code: Select all

class Player;
vai

Code: Select all

class Level;

User avatar
kristapuciitis
Posts: 163
Joined: 03 Jun 2011, 14:22

Re: problēma ar #include

#5 Post by kristapuciitis » 04 Mar 2012, 17:45

Tagad viss iet, bet, kad rakstu level->... Player::Update funkcijā, tad parāda "Pointer to incomplete class type is not allowed". Kur ir problēma?
Gooby pls

atis
Posts: 57
Joined: 30 Nov 2011, 01:08

Re: problēma ar #include

#6 Post by atis » 04 Mar 2012, 18:40

Tev funkcija jādefinē .cpp failā (piemēram, player.cpp), un tajā failā vari droši #inclūdot level.h failu.

Iemesls, kāpēc tu vari neiekļaut .h failu iepriekšējā gadījumā bija tas, ka tev bija jānodefinē tikai pointeris, un visi pointeri ir vienādi pēc būtības. Savukārt līdzko tev jāķēpājas pa struktūras iekšpusi, tad kompilatoram ir jāzina, kas viņai vēderā (jāredz pilnā Level klases definīcija).

User avatar
kristapuciitis
Posts: 163
Joined: 03 Jun 2011, 14:22

Re: problēma ar #include

#7 Post by kristapuciitis » 04 Mar 2012, 19:10

Sapratu, paldies, tagad viss iet. =)
Gooby pls

Post Reply

Return to “Iesācējiem / For beginners”