У меня есть следующая настройка. RectangleT, определенный в файле заголовка в библиотеке. Попытка использовать класс в моем основном приложении. При связывании я получаю ошибку для каждой функции, которую я пытаюсь вызвать - кроме конструктора, и GetLeft/GetTop/GetRight/GetBottom - НО - Я получаю сообщение об ошибке при вызове GetWidth/GetHeight.Почему этот шаблонный класс в библиотеке генерирует ошибки компоновщика при использовании?
Вот код, который у меня есть для простого класса шаблонов.
namespace My2D
{
template <typename T>
class MY2D_API RectangleT
{
public: // Construction
RectangleT(const T left = 0, const T top = 0, const T right = 0, const T bottom = 0)
: m_left(left)
, m_top(top)
, m_right(right)
, m_bottom(bottom)
{
}
RectangleT(const RectangleT<T> &source)
: m_left(source.m_left)
, m_top(source.m_top)
, m_right(source.m_right)
, m_bottom(source.m_bottom)
{
}
virtual ~RectangleT(void)
{
}
public: // Getters/setters
T GetLeft() const { return m_left; }
T GetTop() const { return m_top; }
T GetRight() const { return m_right; }
T GetBottom() const { return m_bottom; }
T GetWidth() const { return m_right - m_left; }
T GetHeight() const { return m_bottom - m_top; }
void SetLeft(const T value) { m_left = value; }
void SetTop(const T value) { m_top = value; }
void SetRight(const T value) { m_right = value; }
void SetBottom(const T value) { m_bottom = value; }
protected: // Members
T m_left;
T m_top;
T m_right;
T m_bottom;
};
}
У кого-нибудь есть идеи ?!
Текст ошибки компоновщика бы помочь ... – Cogwheel
Прежде всего, я предполагаю, что MY2D_API для экспорта. Нет необходимости экспортировать шаблон класса, он имеет внутреннюю связь. Я бы рекомендовал удалить это, так как, даже если это не имеет никакого эффекта, это сбивает с толку. В противном случае класс выглядит хорошо для меня. Я подозреваю, что это проблема с использованием клиента: отправьте сообщение об ошибке и код клиента с именем GetWidth/GetHeight. Кроме того, так же, как домашнее животное, вам нужен виртуальный дтор? Используется ли этот класс для наследования? Я бы рекомендовал против унаследовать от RectangleT, чтобы сделать SuperRectangles или что-то еще. – stinky472
Вам необходимо указать код для макроса MY2D_API. Ваш код компилируется (в 2008 году) отлично без него, поэтому проблема, вероятно, связана с этим макросом. И вам нужно дать точное сообщение об ошибке компоновщика. Без сообщения об ошибке, пытающегося помочь вам догадываться о листьях чая. – SigTerm