error LNK2001: unresolved external symbol Topic is solved

这是wxWidgets论坛的中文版本。在这里,您可以用您的母语汉语讨论上面任一子论坛所涉及的所有关于wxWidgets的话题。欢迎大家参与到对有价值的帖子的中英互译工作中来!
Post Reply
Twe
In need of some credit
In need of some credit
Posts: 4
Joined: Wed May 14, 2014 9:12 am

error LNK2001: unresolved external symbol

Post by Twe »

我想写一个简单的dialog程序 结果出现下面的错误:
cParkApp.obj : error LNK2001: unresolved external symbol "public: __thiscall cParkDlg::cParkDlg(class wxWindow *,int,class wxString const &,class wxPoint const &,class wxSize const &,long)" (??0cParkDlg@@QAE@PAVwxWindow@@HABVwxString@@ABVwxPoint@@ABVwxSize@@J@Z)
Debug/park.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

代码如下:
// cParkDlg.h:

#include <wx/dialog.h>

class cParkDlg : public wxDialog
{
public:
cParkDlg();
virtual ~cParkDlg();

cParkDlg(wxWindow* parent,
wxWindowID id = wxID_ANY,
const wxString& name = wxT("title"),
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long stytle = wxCAPTION|wxRESIZE_BORDER|wxSYSTEM_MENU );

};

// cParkApp.h:

#include <wx/app.h>
#include <wx/wx.h>

class cParkApp : public wxApp
{
public:
cParkApp();
virtual ~cParkApp();

virtual bool OnInit();

//DECLARE_EVENT_TABLE()
};

// cParkDlg.cpp:

#include "cParkDlg.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

cParkDlg::cParkDlg()
{

}

cParkDlg::~cParkDlg()
{

}

// cParkApp.cpp:

#include "cParkApp.h"
#include "cParkDlg.h"

//BEGIN_EVENT_TABLE(cParkApp, wxApp)

//END_EVENT_TABLE()

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

cParkApp::cParkApp()
{

}

cParkApp::~cParkApp()
{

}
///////////////////////////////////////////////////////////////////////
IMPLEMENT_APP(cParkApp);

///////////////////////////////////////////////////////////////////////
bool cParkApp::OnInit()
{
cParkDlg dlg = new cParkDlg(NULL);

if (dlg.ShowModal() == wxID_OK)
{

}
else if (dlg.ShowModal() == wxID_CANCEL)
{

}

return true;
}

我是个菜鸟 初步接触C++和WX ,代码如有错误希望见谅。
Fumino
In need of some credit
In need of some credit
Posts: 1
Joined: Fri May 23, 2014 2:53 am

Re: error LNK2001: unresolved external symbol

Post by Fumino »

你为cParkDlg声明了两个构造函数:

一个不带参数的cParkDlg()

另一个是带有参数的
cParkDlg(wxWindow* parent,
wxWindowID id = wxID_ANY,
const wxString& name = wxT("title"),
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long stytle = wxCAPTION|wxRESIZE_BORDER|wxSYSTEM_MENU );

你在app中使用这一句的时候
cParkDlg dlg = new cParkDlg(NULL);
编译器为为cParkDlg的构造函数匹配到了带参数的构造函数,并在导出符号表中为dlg对象指定了构造函数的符号(也就是public: __thiscall cParkDlg::cParkDlg(class wxWindow *...........

但是这个带参数的构造函数并没有被定义,链接器找不到对应的构造方法,自然就会报那个错误
解决的方法就是你为cParkDlg那个带参数的构造函数添加定义,这是c++的基础知识之一
Twe
In need of some credit
In need of some credit
Posts: 4
Joined: Wed May 14, 2014 9:12 am

Re: error LNK2001: unresolved external symbol

Post by Twe »

Fumino wrote:你为cParkDlg声明了两个构造函数:

一个不带参数的cParkDlg()

另一个是带有参数的
cParkDlg(wxWindow* parent,
wxWindowID id = wxID_ANY,
const wxString& name = wxT("title"),
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long stytle = wxCAPTION|wxRESIZE_BORDER|wxSYSTEM_MENU );

你在app中使用这一句的时候
cParkDlg dlg = new cParkDlg(NULL);
编译器为为cParkDlg的构造函数匹配到了带参数的构造函数,并在导出符号表中为dlg对象指定了构造函数的符号(也就是public: __thiscall cParkDlg::cParkDlg(class wxWindow *...........

但是这个带参数的构造函数并没有被定义,链接器找不到对应的构造方法,自然就会报那个错误
解决的方法就是你为cParkDlg那个带参数的构造函数添加定义,这是c++的基础知识之一
恩 谢谢你 我对c++和wxwidgets不是很熟悉,一些常识的东西有些模糊。
Post Reply