2017-09-15 77 views
-1

我在这个主题上看到了很多问题和答案,但没有一个涉及到我的问题。我的函数在.h文件中正确声明,并在他们的.cpp文件采取的正确的参数定义,但我仍然得到这个错误:当函数被正确定义时,我仍然如何获得LNK2019?

error LNK2019: unresolved external symbol "public: void __cdecl ox::Window::Init(__int64 (__cdecl*)(struct HWND__ *,unsigned int,unsigned __int64,__int64),class ox::OxLog *)" ([email protected]@[email protected]@[email protected]@[email protected]@[email protected]@Z) referenced in function "private: void __cdecl App::Init(void)" ([email protected]@@AEAAXXZ) 

在window.h

namespace ox { 
    FOO_API class Window 
    { 
     public: 
      // Some declarations 
    #if defined BAR_WIN32 
      void Init(WNDPROC windowProc, OxLog* log); 
    #endif 
    }; 
} 

WindowWin32.cpp

namespace ox { 
    void Window::Init(WNDPROC windowProc, OxLog* log) 
    { 
     // some code 
    } 
} 

App.h

class App 
{ 
    public: 
     // Some declarations 
    private: 
     ox::Window pWindow; 
    private: 
     void Init(); 
}; 

App.cpp

void App::Init() 
{ 
    // Create Window 
    pWindow = new ox::Window(); 
    pWindow->Init(WinProc, gLog); 
} 
+2

在'WindowsWin32.cpp'中,你应该声明你的函数为'ox :: Window :: Init(' – CoryKramer

+0

@CoryKramer这不是一个问题,因为它已经被命名空间包围了 – SpicyWeenie

+0

有一些非常可疑WNDPROC函数指针,它在链接器错误信息中显示为'__cdecl',它不可能是正确的,它是'__stdcall'。除了以非常糟糕的方式崩溃你的程序之外,如果定义正确,这种不匹配肯定会产生LNK2019我们不能看到它来自哪里 –

回答

0

问题是你混合WINAPI功能和C++函数。 Winapi函数总是使用__stdcall调用约定,而C++的默认值是__cdecl。您需要在WNDPROC参数的函数定义中正确限定调用约定。

+0

好吧,根据你的回答,如果我的main.cpp使用'int main()',我应该改用'INT WINAPI WinMain (HINSTANCE,HINSTANCE,LPSTR,INT)'? – SpicyWeenie

相关问题