В проекте C ++ на основе плагинов у меня есть TmpClass
, который используется для обмена данными между основным приложением и плагинами. Поэтому соответствующий TmpClass.h
включен в класс интерфейса абстрактного плагина, который включен в основной проект приложения и реализован каждым плагином.
Поскольку плагины работают с векторами STL экземпляров TmpClass
, для TmpClass
должен быть конструктор и деструктор по умолчанию. Я объявил это в TmpClass.h
:
class TmpClass {
TmpClass();
~TmpClass();
}
и реализовал их в TmpClass.cpp
.
TmpClass::~TmpClass() {}
TmpClass::TmpClass() {}
Однако при компиляции плагинов это приводит к тому, что компоновщик жалуется на два неразрешенных внешних объекта - конструктор по умолчанию и деструктор TmpClass
, как того требует экземпляр шаблона std::vector<TmpClass>
- хотя все другие функции, которые я объявляю в TmpClass.h
и реализовать в TmpClass.cpp
работе. Как только я удаляю (пустой) конструктор и деструктор по умолчанию из файла .cpp и вставляю их в объявление класса в файле .h, плагины компилируются и работают.
Почему конструктор и деструктор по умолчанию имеют встроенный для компиляции этого кода? Почему это даже важно? (Я использую MSVC ++ 8).