ข้อผิดพลาด LNK2019: สัญลักษณ์ภายนอกที่ไม่ได้รับการแก้ไข "สาธารณะ: __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;
        };

ฉันกำลังพยายามเขียน Unit Test แบบนี้

TEST_CLASS(LinkedListUnitTests)
{
public:

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

};

เมื่อฉันพยายามสร้างโค้ดด้านบน ฉันได้รับข้อผิดพลาดที่น่าเกลียด -

ข้อผิดพลาด LNK2019: สัญลักษณ์ภายนอกที่ไม่ได้รับการแก้ไข "สาธารณะ: __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){..}

ฉันพยายามรับ C++ หลังจากผ่านไปนาน ดังนั้นฉันจะไม่แปลกใจถ้าฉันทำอะไรโง่มาก มีใครคิดบ้างไหม?


person Anshu Dutta    schedule 01.04.2016    source แหล่งที่มา
comment
อาจซ้ำกันของ เหตุใดจึงสามารถใช้เทมเพลตได้ในส่วนหัวเท่านั้น ไฟล์?.   -  person Some programmer dude    schedule 01.04.2016


คำตอบ (1)


เทมเพลตจะต้องนำไปใช้งานแบบอินไลน์อย่างเหมาะสม คอมไพเลอร์รอบที่สองไม่สามารถใช้ไฟล์ CPP ที่มีการนำไปใช้งานได้อีกครั้ง หรือคุณต้อง #include the CPP ไฟล์ด้วย

อ้างอิงบทความนี้

person Ajay    schedule 01.04.2016