提问人:oodan123 提问时间:7/24/2015 更新时间:7/24/2015 访问量:158
尝试使用另一个类中的变量时出现 C++ 链接器错误
C++ Linker error when trying to use variable from another class
问:
我对 c++ 很陌生,这个错误一直在困扰我。基本上,我有一个名为 PvSimpleUISampleDlg 的类,它是一个显示和连接 FLIR 热像仪的 GUI。在 DoDataExchange 方法中,我有一行将 IDC_IP_EDIT 与类中其他位置使用的 mIPEdit 链接起来。
//PvSimpleUISampleDlg.cpp
void PvSimpleUISampleDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_IP_EDIT, mIPEdit);
}
我创建了一个名为 SettingsDlg 的新对话框类,当我单击 PvSimpleUISampleDlg 类中的按钮时,该类将打开,并且我想在该对话框中使用相同的 mIPEdit 变量,以便 GUI 的每个部分中的数据都相同。因此,我进入了 PvSimpleUISampleDlg.h 文件,并将 extern 放在 mIPEdit 减速的前面,以便其他类可以看到它。
//PvSimpleUISampleDlg.h
extern CEdit mIPEdit;
现在,在 SettingsDlg.cpp 文件中,我将同一行放入其自己的 DoDataExchange 方法中,并且确信它识别了 mIPEdit 变量。
//SettingsDlg.cpp
void SettingsDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_IP_EDIT, mIPEdit);
}
但是,当我现在构建解决方案时,出现错误
1>PvSimpleUISampleDlg.obj : error LNK2001: unresolved external symbol "class CEdit mIPEdit" (?mIPEdit@@3VCEdit@@A)
1>SettingsDlg.obj : error LNK2001: unresolved external symbol "class CEdit mIPEdit" (?mIPEdit@@3VCEdit@@A)
1>D:\FLIR Project\FLIR Project\PvSimpleUISample\Debug\PvSimpleUISample_Dbg.exe : fatal error LNK1120: 1 unresolved externals
我已将 PvSimpleUISampleDlg.h 文件包含在 SettingsDlg.cpp 和 SettingsDlg.h 文件中,我所做的只是复制一行。我读过很多问类似问题的问题,但我仍然不明白,因为答案是“您需要将其链接到两个项目”或“您需要在项目中包含库”我已经将两个 SettingsDlg 文件添加到项目中,我只使用一个项目。所有适当的库都应该链接到项目,因为解决方案构建良好,只有在我添加该行时才会出现错误。任何帮助/建议将不胜感激。
答:
据我了解,
extern CEdit mIPEdit;
这是一个宣言,而不是一个定义。 您仍然必须在某个 .cpp 文件中的某个地方拥有它的定义。必须编译该 .cpp 文件,并将其链接到使用该声明的两个 .cpp 文件的目标文件。某些.cpp中的相应定义如下所示:
CEdit mIPEdit;
评论
CEdit mIPEdit
CEdit mIPEdit
extern CEdit mIPEdit
CEdit mIPEdit
extern
评论
mIPEdit