ошибка LNK2019: неразрешенный внешний символ "public: __thiscall

У меня есть класс, как

template <class T>
        class LinkedListItem
        {
        public:
            LinkedListItem(T value);
            LinkedListItem(const LinkedListItem<T>& rhs);
            T getValue(void);
            LinkedListItem<T>& getNext(void);
            void setNext(LinkedListItem<T>& next);
            LinkedListItem<T>& operator=(const LinkedListItem<T>& rhs);
            ~LinkedListItem();
        private:
            T _value;
            LinkedListItem& _next;
        };

Я пытаюсь написать модульный тест, например

TEST_CLASS(LinkedListUnitTests)
{
public:

    TEST_METHOD(Add_to_An_Empty_Linked_List)
    {
        LinkedListItem<int> item(1);
    }
//private:

};

Когда я пытаюсь просто создать приведенный выше код, я получаю уродливую ошибку -

ошибка LNK2019: неразрешенный внешний символ "public: __thiscall cpp::libraries::datastructures::LinkedListItem::LinkedListItem(int)" (??0?$LinkedListItem@H@datastructures@libraries@cpp@@QAE@H@Z) ссылка в функции "public: void __thiscall CppLibrariesTests::LinkedListUnitTests::Add_to_An_Empty_Linked_List(void)" (?Add_to_An_Empty_Linked_List@LinkedListUnitTests@CppLibrariesTests@@QAEXXZ)

Я использую Visual Studio 2012.

Интересно, что если я добавлю шаблон в класс модульного теста, как показано ниже, ошибка компиляции исчезнет, ​​но тесты не будут обнаружены, и я не могу их запустить.

template<class T>
TEST_CLASS(LinkedListUnitTests){..}

Я пытаюсь освоить С++ после долгого времени, поэтому не удивлюсь, если сделаю что-то очень глупое. Любые мысли кто-нибудь?


person Anshu Dutta    schedule 01.04.2016    source источник
comment
Возможный дубликат Почему шаблоны могут быть реализованы только в заголовке файл?.   -  person Some programmer dude    schedule 01.04.2016


Ответы (1)


В идеале шаблоны должны быть встроены. Второй проход компилятора не может повторно использовать файл CPP, содержащий реализацию. Или вам нужно также #include файл CPP.

Перейти к этой статье

person Ajay    schedule 01.04.2016