У меня есть проект с исходным кодом и TestProject в том же решении.
Тестовый файл с использованием GTest framework в TestProject получил #include
файла заголовка Composite.h
из основного проекта.
В теле первого GTest я создаю экземпляр класса Composite, объявленного в Composite.h
. Эта строка дает ошибку компиляции LNK2001: неразрешенный внешний символ для каждого из частных методов класса Composite.
Код в файле myTest.cpp
выглядит так:
#include "Composite.h"
TEST(testComposite, testCase1)
{
Composite c; // error LNK2001
// my test here;
}
Что случилось с этим экземпляром?
РЕДАКТИРОВАТЬ
Я связан с библиотекой, содержащей реализацию частных методов в классе Composite. Кроме того, я попробовал альтернативный вариант #inccude.cpp для исходного кода этого класса. Любое решение не устраняет проблему.
РЕДАКТИРОВАТЬ - ВОПРОС
Может ли быть так, что папка с файлами moc для классов Composite и его родительского класса (с Q_OBJECT
определена) невидима?
Я попытался добавить в дополнительные файлы каталогов Test Project дополнительную папку, содержащую файлы moc. Это тоже не работает.
В создании не должно быть ничего плохого. Я предполагаю, что есть Composite.cpp, который содержит ваш недостающий или неразрешенный код.
Вам нужно будет добавить этот Composite.cpp в свой проект или связать приложение с библиотекой, содержащей Composite.cpp
Включения не имеют ничего общего с привязкой программы. Что вы делаете для компиляции, и это происходит до привязки. Чтобы устранить проблему, которую вы видите здесь, вам нужно связать все (объектный файл, библиотека), содержащий реализацию частных методов, которые вы упомянули.
Composite
. Для получения дополнительной информации см. Ссылку в комментарии выше.