LNK2001 на все частные методы [дубликаты]

0

У меня есть проект с исходным кодом и 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. Это тоже не работает.

  • 0
    #includes для компилятора. Ваша ошибка - ошибка компоновщика, означающая, что компилятор уже выполнил свою работу и преуспел. Возможно, вы не включили в свой проект библиотеку с объектным кодом Composite . Для получения дополнительной информации см. Ссылку в комментарии выше.
Теги:
visual-c++
qt
lnk2001

2 ответа

1
Лучший ответ

В создании не должно быть ничего плохого. Я предполагаю, что есть Composite.cpp, который содержит ваш недостающий или неразрешенный код.

Вам нужно будет добавить этот Composite.cpp в свой проект или связать приложение с библиотекой, содержащей Composite.cpp

  • 0
    Спасибо, имеет смысл, но: ни одно из предложенных вами решений не исправляет это. Я связался с библиотекой lib и, в качестве альтернативы, добавил файлы для .cpp
  • 0
    Гектометр Вы не должны включать cpp, но добавить его в свой проект Visual Studio. Альтернатива: Возможно, ваш класс Composite включает в себя другой код, который вам нужно будет добавить в ваш проект.
Показать ещё 1 комментарий
1

Включения не имеют ничего общего с привязкой программы. Что вы делаете для компиляции, и это происходит до привязки. Чтобы устранить проблему, которую вы видите здесь, вам нужно связать все (объектный файл, библиотека), содержащий реализацию частных методов, которые вы упомянули.

  • 0
    Спасибо, имеет смысл, но: ни одно из предложенных вами решений не исправляет это. Я связался с библиотекой lib и, в качестве альтернативы, добавил файлы для .cpp

Ещё вопросы

Сообщество Overcoder
Наверх
Меню