ошибка LNK2019: неразрешенный внешний символ - невидимый экземпляр проблемы

116
10

Im имеет ошибку LNK2019: проблема неразрешенных внешних символов.

У меня есть 2 файла, и я перемещаю их в общую папку, поэтому 2 разных проекта могут использовать класс. Там есть другие классы.

Проблема в том, что когда я вызываю класс из основного одного из проектов,

error LNK2019: unresolved external symbol "public: __thiscall CProcessCommandLine::~CProcessCommandLine(void)" (??1CProcessCommandLine@@QAE@XZ) referenced in function _main
error LNK2019: unresolved external symbol "public: bool __thiscall CProcessCommandLine::Wait(void)const " (?Wait@CProcessCommandLine@@QBE_NXZ) referenced in function _main
error LNK2019: unresolved external symbol "public: class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > const & __thiscall CProcessCommandLine::getTargetNamesVect(void)" (?getTargetNamesVect@CProcessCommandLine@@QAEABV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@XZ) referenced in function _main
error LNK2019: unresolved external symbol "public: __thiscall CProcessCommandLine::CProcessCommandLine(void)" (??0CProcessCommandLine@@QAE@XZ) referenced in function _main

Когда я открываю файл заголовка и щелкаю правой кнопкой мыши по одной из функций, и переходим к определению, оно не переходит к определению в.cpp. Когда я нажимаю правой кнопкой мыши на функцию в.cpp и говорю, переходите к определению, она говорит: "Символ не определен".

Кто-нибудь знает, почему это может произойти? Оба.h и.cpp находятся в одном месте и находятся в дополнительных каталогах Include.

РЕДАКТИРОВАТЬ:

Следующий код существует в других файлах в этой папке:

#ifdef PROJ1
#include "class1.h"
#elif PROJ2
#include "class2.h"
#endif

Я никогда раньше этого не видел. Они используются в коде, но только для включения правильного заголовка в зависимости от того, в каком проекте он используется. Вышеуказанное находится в.cpp других классов в этой папке. Поэтому я положил его сюда. Но в других классах проект, к которому он не принадлежит, является серым. Когда я помещаю его в.h, он выделяет правильный заголовок. Но по какой-то причине этот.cpp не распознается как часть проекта.

спросил(а) 2012-04-17T15:25:00+04:00 8 лет, 7 месяцев назад
1
Решение
84

Если ваша функция принадлежит к другому модулю, чем тот, который вы строите, вам придется экспортировать классы:

#ifdef THIRD_MODULE
#define DLLIMPEXP _declspec(dllexport)
#else
#define DLLIMPEXP _declspec(dllimport)
#endif

class DLLIMPEXP CProcessCommandLine
{
//...
};

вы создаете проект, который определяет этот класс с определенным THIRD_MODULE.

Этот проект будет генерировать .lib файл, который вы должны добавить к дополнительным зависимостям в настройках компоновщика вашего основного проекта.

ответил(а) 2012-04-17T15:37:00+04:00 8 лет, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема