Jump to content
  • Advertisement
Sign in to follow this  
Toadhead

LNK 2019 and LNK 2001 linking errors using inheritence

This topic is 2781 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I hate programming, for some reason I can't find the error in the code below.
Note that when I don't inherit Problem1 from IProblem everything works fine.

[source]//main.cpp

#include <iostream>
#include "Problem1.h"

int main()
{
Problem1 myproblem;
myproblem.Solve();

int dontexit;
std::cin >> dontexit;

return 0;
}





//IProblem.h

class IProblem
{

public:
virtual void Solve() =0;
virtual int GetID() const =0;

virtual ~IProblem() {};
};





//Problem1.h

#include "IProblem.h"

class Problem1 : public IProblem
{
public:

void Solve();
int GetID() const;

private:
int m_ID;
};





//Problem1.cpp


#include <iostream>
#include "Problem1.h"

int Problem1::GetID() const {return m_ID;}

void Problem1::Solve()
{

std::cout << "blabla" << std::endl;
}



[/source]

Share this post


Link to post
Share on other sites
Advertisement
You have an extra semicolon after your destructor declaration. I'm not sure if that's enough to cause an error (especially a linker error), but that's the only problem I can see. Can you post the exact errors you're getting?

Share this post


Link to post
Share on other sites
Need a bit more information. What API/IDE are you using? It appears to be a console app. Correct? What are the exact errors you're getting? Need the full text.

The code looks okay, so it may be that you're not linking the proper libraries or don't have the correct default directories, etc. What are your project settings, in particular, the paths to your libraries and include files.

EDIT: Your code, as-is, doesn't have the problem, but you need to set m_id before you use it.

Share this post


Link to post
Share on other sites
I just choose empty project from the wizard.
I'm getting the error below:




1> main.cpp
1>main.obj : error LNK2019: unresolved external symbol "public: virtual void __thiscall Problem1::Solve(void)" (?Solve@Problem1@@UAEXXZ) referenced in function _main
1>main.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall Problem1::GetID(void)const " (?GetID@Problem1@@UBEHXZ)
1>C:\Users\robvleugel\Documents\Visual Studio 2010\Projects\Test\Debug\Test.exe : fatal error LNK1120: 2 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========




EDIT:

Hm I just started a new empty project and used these source files, and everything compiles fine. Although I still want to know what caused the linking problems I think I'm not going to investigate this any further. My guess is that the project files somehow got corrupt after I changed some folder names as I was not satishfied with the name I gave it.

Thanks buckeye for your advice on not initializing m_ID, I totally overlooked that.

Share this post


Link to post
Share on other sites
From the description of the symptoms, it sounds like [font=Consolas,]Problem1.cpp[/font] wasn't included in your project file.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!