从另一个文件(C++、QT)访问函数 Unresolved external
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
信号是一个存储一些数据的对象。 Signalparse 使用信号,解析文本文件并将其读入信号。在将它放入我的 GUI 程序之前,我在准系统控制台应用程序上测试了这个功能,所以我知道它有效(有效)。
现在我发现自己试图从 mainwindow.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
}
在mainwindow.cpp里面我声明了一个
std::vector<Signal> signalList;
存储来自 ReturnSignal 的 returned 向量。
然后我用
signalList = ReturnSignal(signalFilePath);
在 mainwindow.cpp 中最终调用此函数和 return 我的数据。注释掉时,没有错误。但是,此行会导致错误:
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++ Compiler 12.0
经过一些严重的头痛之后,我找到了一个非常简单的解决方案。我只真正使用过命令行编译器或 Visual Studio,我没有想到这一点。
事实证明,为了修复我正在处理的大部分未解决的外部错误,我不得不简单地进入构建菜单,清理我的项目,然后 "Run qmake"。在此之后,我所有未解决的外部问题都消失了,我的程序开始运行了。
不知道为什么这么难找到这些信息,希望对有类似情况的人有所帮助。
我已经为此苦思冥想太久了,并且研究了所有我找不到问题的地方。
我正在用 QT 编写一个 GUI 程序,在主程序文件外部但在项目中的一些文件中有一些函数。结构是这样的:
Source files:
main.cpp
mainwindow.cpp
signal.cpp
signalparse.cpp
header files:
mainwindow.h
signal.h
signalparse.h
信号是一个存储一些数据的对象。 Signalparse 使用信号,解析文本文件并将其读入信号。在将它放入我的 GUI 程序之前,我在准系统控制台应用程序上测试了这个功能,所以我知道它有效(有效)。
现在我发现自己试图从 mainwindow.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
}
在mainwindow.cpp里面我声明了一个
std::vector<Signal> signalList;
存储来自 ReturnSignal 的 returned 向量。
然后我用
signalList = ReturnSignal(signalFilePath);
在 mainwindow.cpp 中最终调用此函数和 return 我的数据。注释掉时,没有错误。但是,此行会导致错误:
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++ Compiler 12.0
经过一些严重的头痛之后,我找到了一个非常简单的解决方案。我只真正使用过命令行编译器或 Visual Studio,我没有想到这一点。
事实证明,为了修复我正在处理的大部分未解决的外部错误,我不得不简单地进入构建菜单,清理我的项目,然后 "Run qmake"。在此之后,我所有未解决的外部问题都消失了,我的程序开始运行了。
不知道为什么这么难找到这些信息,希望对有类似情况的人有所帮助。