C ++未解析的外部符号(LNK2019)

时间:2013-01-03 09:31:17

标签: c++ dll linker

我花了最近两天的时间在类似的问题中搜索并实现答案,但收效甚微。我有一个外部.dll(windows)的API,我的头文件包含在我的.cpp文件中以引用API。

但是我有这个问题,无论我做什么,我总是得到一个未解析的外部符号,在我的.h文件中引用这一行。是的,我使用过Google并将我在代码中找到的答案修改为没有成功。

foo.h中

Class Foo {
    public:
        static Foo* Interface_Get(char* dllfilename);

Foo.cpp

// I declare this just underneath the #include "Foo.h" header
Foo *foo = 0;

在我的main函数中,我将其声明为此(以及其他一些很好的函数)。

//This has already been created and both Header and .dll are in the same directory.
Foo::Interface_Get("bar.dll"); 

我收到此错误

error LNK2019: unresolved external symbol 
    "public: static class Foo * __cdecl Foo::Interface_Get(char *)"

我已经尝试了我所知道的一切(这是我的第一次.dll创作体验)我有一种感觉,我错过了一些非常明显的东西,但对于我的生活,我看不到它。

整个Foo.cpp

#include "Foo.h"
Foo* Foo::Interface_Get(char* dllfilename); //May not be redeclared outside class error

Foo* foo = 0;

bool Frame()
{
if (foo->Key_Down(DIK_ESCAPE))
    return false;   
return true;
}


INT WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, INT)
{
foo->Interface_Get("bar.dll");

foo->System_SetState(grSTATE_FRAME, Frame);

foo->System_SetState(grSTATE_WINDOWED, true);

foo->System_SetState(grSTATE_KEYBOARD, true);

foo->System_Initiate();

foo->System_Start();

foo->System_Shutdown();

foo->Inferface_Release();

return 0;
}

2 个答案:

答案 0 :(得分:2)

This question解释了常见问题,在您的情况下,它(可能)是以下组合:

  • (可能)忘记实施该功能
  • 忘记__declspec(dllexport)
  • 忘记链接图书馆

答案 1 :(得分:1)

如果你没有这样做,你需要为Interface_Get(char* dllfilename);提供函数定义。

这只是重新声明的功能,你需要提供如下格式的函数{}

Foo* Foo::Interface_Get(char* dllfilename); //May not be redeclared outside class error

Foo.cpp中

Foo* Foo::Interface_Get(char* dllfilename)
{
  //....
  return new Foo();
}