Я не понимаю, почему я получаю неразрешенный внешний символ в этом конкретном примере.Не понимаю, почему я получаю неразрешенный внешний символ?
У меня есть структура Rectangle, определенная в файле заголовка.
У меня есть класс уровня, который имеет указатель на класс Player, так как уровень создает нового игрока.
В моем классе Player конструктор берет указатель на текущий уровень.
Так как мой уровень включает в себя Player.h
, я отправляю объявить уровень в моем классе Player, чтобы предотвратить круговую ссылку.
Однако, когда я пытаюсь добавить переменную-член Rectangle в свой класс Player, я получаю неразрешенную внешнюю ошибку символа, но я не понимаю, почему - поскольку класс Player включает заголовок - и определение находится в заголовок. Он отлично работает в моем классе Level.
Кроме того - если я изменяю переменную-член на указатель, он связывается в порядке.
Может кто-нибудь объяснить мне, почему это так и как я могу исправить проблему?
// Rectangle.h
#pragma once
namespace Test
{
struct Rectangle
{
public:
Rectangle();
Rectangle(
int x,
int y,
int width,
int height) :
X(x),
Y(y),
Width(width),
Height(height)
{
}
int X;
int Y;
int Width;
int Height;
};
}
// Level.h
#pragma once
#include "Player.h"
#include <memory>
namespace Test
{
class Level
{
public:
Level()
{
_player.reset(new Player(this));
};
private:
std::unique_ptr<Player> _player;
};
}
// Player.h
#pragma once
#include "Rectangle.h"
namespace Test
{
class Level;
class Player
{
public:
Player(
Level* currentLevel) :
_currentLevel(currentLevel)
{
}
private:
Level* _currentLevel;
// This line causes the issue
Rectangle _localBounds;
};
}
Покажите, что вы получили? Вы никогда не определяете конструктор по умолчанию Rectangle, AFAICS. –
'Прямоугольник() {}' –
ОН МОЙ БОГ. Ребята. Спасибо. Как я пропустил это. Кто-то создает ответ, и я отмечу его принятым. Я такой дуф. – Terry