Question

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!

Was it helpful?

Solution

It turns out that, there is another project OtherProject that includes class B and uses it's function bar(). 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 include A.cpp in OtherProject.

OTHER TIPS

Either the implementation of this method is commented out in A.cpp:

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

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:

1>Compiling...
1>A.cpp

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top