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

У меня есть визуальное решение для студии с несколькими проектами. Одним из них, «MyProject», является статическая библиотека (.lib). Проект, среди многих других классов, имеет два класса «А» и «В».

хиджры:

#pragma once

class A
{
public:
void foo();
};

a.cpp:

#include A.h

void A::foo(){
//do something
}

B.h:

#pragma once

class B
{
public:
void bar();
};

B.cpp:

#include B.h
#include A.h

void B::bar(){
A a;
a.foo();
}

Без ошибок компиляции я получаю ошибку компоновки:

OtherProject.lib (B.obj): ошибка LNK2019: неразрешенный внешний символ «public: void __thiscall
A :: foo (void) «(? Foo @ A @@ QAE_NXZ), на которую ссылается функция» public: void
__thiscall B :: bar (void) «(? bar @ B @@ QAEXXZ)

Кажется, все в порядке. Я вижу процесс компиляции A.cpp. Сборка или связывание только проекта «MyProject» — это нормально. Но при попытке построить полное решение я получаю ошибку.

Спасибо!

1

Решение

Оказывается, есть еще один проект OtherProject это включает в себя класс B и использует его функцию bar(), Я недостаточно хорошо прочитал ошибку и не заметил, что ошибка компоновки возникает в другом проекте. Все, что мне нужно было сделать, это включить A.cpp в OtherProject,

1

Другие решения

В Visual-Studio большинство проблем со связыванием связано с отсутствием добавления .cpp файлы.

Проверьте все файлы реализации добавляются в проект. Затем очистите и постройте свой проект.

0

Либо реализация этого метода закомментирована в A.cpp:

void A::foo(){
//do something
}

Или же A.cpp не входит в сборку проекта. Щелкните правой кнопкой мыши A.cpp в обозревателе решений и выберите Свойства, чтобы увидеть, исключено ли оно из сборки. Когда вы строите, вы видите это:

1>Compiling...
1>A.cpp

Я набрал этот код в моей Visual Studio, и он работал нормально.

0
По вопросам рекламы [email protected]