Member 13899738 Ответов: 2

С++ отсутствует спецификатор типа и неизвестный спецификатор переопределения


У меня есть 3 класса, которые были созданы
Класс карты
#ifndef MAP_H
#define MAP_H

#include "position.h"
#include "Entity.h"
#include <iostream>
#include <windows.h>
#include <ctime>
#include <iostream>

class Map
{
private:
	char mapSize[21][21];
public:
	Map();
	~Map();
};
#endif


Класс сущностей
#ifndef ENTITY_H
#define ENTITY_H

#include "Map.h"

class Entity
{
	position pos;
public:
	Entity();
	~Entity();
};
#endif


класс должности
#ifndef POSITION_H
#define POSITION_H

#include "Map.h"

class position
{
public:
	int x;
	int y;
	position();
	~position();
};

#endif


Похоже, что источник ошибки находится в entity.h, а именно в строке
position pos;


Эти классы, когда они скомпилированы вместе, дают мне две ошибки
1) C4430 - отсутствует спецификатор типа - предполагается int. Примечание: C++ не поддерживает default-int
2) C3646 - 'pos': неизвестный спецификатор переопределения

Я хотел бы знать, что вызывает эту проблему, так как я, кажется, не могу понять, что это за проблема

Что я уже пробовал:

Первоначально, в сущности.ч у меня был в комплекте установки.h также, но я удалил его, думая, что map.h вызывает петлю. Очевидно, нет.

К ВАШЕМУ СВЕДЕНИЮ:
position pos;

был определен публично и раньше, но это все равно не сработало

Rick York

Карстенк прав, но почему они включают Map.h? ни в одном из этих классов нет экземпляров карты, поэтому им это не нужно.

2 Ответов

Рейтинг:
1

KarstenK

В файле заголовка сущности необходимо включить заголовок позиции, чтобы объявить класс позиции для члена класса сущности.


Michael Haephrati

Пожалуйста, уточните и приведите пример

Рейтинг:
1

Steve Owen

Не давая вам прямого ответа - подумайте о том, что должен "знать" каждый файл класса / заголовка, так же как и все, что находится в позиции класса, должно знать о карте класса. Если нет, то не включайте map.h. попробуйте это рассуждение на всех 3-х определениях классов.