I have a visual studio solution with multiple projects. One of them, "MyProject" is a static library (.lib). The project, among many other classes has two classes "A" and "B".
A.h:
#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();
}
Without compilation errors I'm getting the linkage error:
OtherProject.lib(B.obj) : error LNK2019: unresolved external symbol "public: void __thiscall A::foo(void)" (?foo@A@@QAE_NXZ) referenced in function "public: void __thiscall B::bar(void)" (?bar@B@@QAEXXZ)
Everything seems to be fine. I do see the compilation process of A.cpp. Building or linking only the project "MyProject" is fine. But when trying to build the whole solution I'm getting the error.
Thanks!
Either the implementation of this method is commented out in A.cpp:
Or
A.cpp
is not included in the build of the project. Right click on A.cpp in the Solution Explorer and select Properties to see whether it is Excluded from Build. When you build, do you see this:I typed this code into my Visual Studio and it worked fine.
another solution to this you can merge .h and .cpp files. In this way you will get solution to this. In my case, I did like this and it works well
It turns out that, there is another project
OtherProject
that includes classB
and uses it's functionbar()
. I didn't read the error good enough and didn't notice that the linkage error occurs in another project. All I had to do is includeA.cpp
inOtherProject
.In Visual-Studio most linkage problems are related to forget adding
.cpp
files.Check out all the implementation files are added to the project. Then clean-and-build your project.