提问人:George G 提问时间:1/9/2017 最后编辑:George G 更新时间:1/27/2017 访问量:913
从另一个文件(C++、QT)访问函数 未解析的外部
Accessing a function from another file (C++, QT) Unresolved external
问:
我已经为此苦苦挣扎了太久了,并且研究了所有我找不到问题的地方。
我正在用 QT 编写一个 GUI 程序,并且在主程序文件外部但在项目内的某些文件中有一些功能。结构是这样的:
Source files:
main.cpp
mainwindow.cpp
signal.cpp
signalparse.cpp
header files:
mainwindow.h
signal.h
signalparse.h
Signal 是存储一些数据的对象。Signalparse 使用 signal,解析文本文件并将其读入 signal。在将此功能放入我的 GUI 程序之前,我在准系统控制台应用程序上测试了此功能,因此我知道它有效(有效)。
现在,我发现自己尝试从主窗口 .cpp 文件中的 SignalParse.cpp 文件调用函数 ReturnSignal。
SignalParse.h is below:
#include<vector>
#include <iostream>
#include "signal.h"
void ParseLine(std::string*);
std::string ReturnTitle();
std::vector<Signal> ReturnSignal(std::string);
显示我已声明 ReturnSignal。
在 SignalParse.cpp 中,该函数定义为:
vector<Signal> ReturnSignal(string filename)
{
//does stuff
}
在主窗口.cpp中,我声明了一个
std::vector<Signal> signalList;
来存储从 ReturnSignal 返回的向量。
然后我使用
signalList = ReturnSignal(signalFilePath);
在 MainWindow.cpp 中最终调用此函数并返回我的数据。当注释掉时,没有错误。但是,此行会导致错误:
mainwindow.obj:-1: error: LNK2019: unresolved external symbol "class std::vector<class Signal,class std::allocator<class Signal> > __cdecl ReturnSignal(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?ReturnSignal@@YA?AV?$vector@VSignal@@V?$allocator@VSignal@@@std@@@std@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z) referenced in function "private: void __cdecl MainWindow::on_file_open_triggered(void)" (?on_file_open_triggered@MainWindow@@AEAAXXZ)
我一辈子都无法弄清楚为什么这行不通。有人有什么想法吗?我已经找了好几个小时了! 如果我找到解决方案,我很想重写这个问题以使其更普遍适用,但目前我完全被难住了。 多谢。
编辑:正在使用的编译器是Microsoft Visual C++编译器12.0
答:
经过一些严重的头痛之后,我找到了一个非常简单的解决方案。我只真正使用过命令行编译器或Visual Studio,我没有想到这一点。
事实证明,为了修复我正在处理的大多数未解决的外部错误,我必须简单地进入构建菜单,清理我的项目,然后“运行 qmake”。在此之后,我所有未解决的外部问题都消失了,我的程序正常工作了。
我不知道为什么我很难找到这些信息,希望它能对类似地点的人有所帮助。
评论