Почему этот класс шаблона в библиотеке генерирует ошибки компоновщика при использовании? - PullRequest
0 голосов
/ 29 июня 2010

У меня есть следующие настройки. Класс 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;
    };
}

У кого-нибудь есть идеи ?!

1 Ответ

2 голосов
/ 29 июня 2010

Я удалил директиву компилятора MY2D_API и попробовал ваш код, он работает нормально, см. Ниже.

Windows 7, MS VS 2010

int main ()
{
  My2D::RectangleT < int > rect;

  rect.SetBottom(3);
  rect.SetLeft(3);
  rect.SetRight(8);
  rect.SetTop(8);
  return rect.GetHeight();
}
...