我收到了以下错误消息:
错误1错误LNK2019:未解析的外部符号“public:void __thiscall ArrayIntStorage :: sortOwn(void)”(?sortOwn @ ArrayIntStorage @@ QAEXXZ)在函数_main G中引用:\ 08227 \ ACW \ MAIN \ 08227_ACW2_Test_Harnesses_2010-11 \ C_Style_Array \ main.obj C_Style_Array错误2错误LNK2019:未解析的外部符号“public:void thiscall ArrayIntStorage :: sortStd(void)”(?sortStd @ ArrayIntStorage @@ QAEXXZ)在函数_main中引用G:\ 08227 \ ACW \ MAIN \ 08227_ACW2_Test_Harnesses_2010-11 \ C_Style_Array \ main.obj C_Style_Array错误3错误LNK2019:未解析的外部符号“class std :: basic_ostream>& cdecl operator <<(class std :: basic_ostream>&,class ArrayIntStorage const&)”(?? 6 @ YAAAV?$ basic_ostream @ DU?$ char_traits @ D @ std @@@ std @@ AAV01 @ ABVArrayIntStorage @@@ Z)在函数_main G中引用:\ 08227 \ ACW \ MAIN \ 08227_ACW2_Test_Harnesses_2010-11 \ C_Style_Array \ main.obj C_Style_Array错误4错误LNK2019:未解析的外部符号“class std :: basic_istream>&__cdecl operator >>(class std :: basic _istream>&,类ArrayIntStorage&)“(?? 5 @ YAAAV?$ basic_istream @ DU?$ char_traits @ D @ std @@@ std @@ AAV01 @AAVArrayIntStorage @@@ Z)在函数_main G:\ 08227 \中引用ACW \ MAIN \ 08227_ACW2_Test_Harnesses_2010-11 \ C_Style_Array \ main.obj C_Style_Array错误5错误LNK2019:函数_main中引用的未解析的外部符号“public:bool __thiscall ArrayIntStorage :: setReadSort(bool)”(?setReadSort @ ArrayIntStorage @@ QAE_N_N @ Z) G:\ 08227 \ ACW \ MAIN \ 08227_ACW2_Test_Harnesses_2010-11 \ C_Style_Array \ main.obj C_Style_Array错误6错误LNK1120:5个未解析的外部G:\ 08227 \ ACW \ MAIN \ 08227_ACW2_Test_Harnesses_2010-11 \ C_Style_Array \ Debug \ C_Style_Array.exe 1 1 C_Style_Array
我不知道发生了什么,我想知道我是否错过了什么?我是新来的,它没有给我任何行号,所以我不确定给你的代码,所以我给你这个部分
#include <fstream>
#include <iostream>
using namespace std;
#include "ArrayIntStorage.h"
int main(int argc, char **argv) {
ifstream fin1("ACW2_data.txt");
ofstream out1("1-arrayUnsortedRead.txt");
ofstream out2("2-arrayUnsortedRead-thenSTDSort.txt");
if(!fin1.is_open())
{
cout << "FAIL" << endl;
return 1;
}
ArrayIntStorage arrayStorage1;
arrayStorage1.setReadSort(false); // do not read sort
// read in int values into data structure
fin1 >> arrayStorage1;
// output int values in data structure to file
out1 << arrayStorage1;
// sort data structure using std
arrayStorage1.sortStd();
// output int values in data structure to file
out2 << arrayStorage1;
fin1.close();
out1.close();
out2.close();
4 回答
似乎ArrayIntStorage被编译成一个库 . 检查项目的链接器详细信息,然后添加库 .
您忘记链接定义了ArrayIntStorage函数的库 . 阅读该库的文档,了解如何在项目中使用它 .
您的链接器(编译器的一部分)无法找到
ArrayIntStorage::sortOwn()
的定义位置 .这通常发生在:
ArrayIntStorage::sortOwn()
的定义在另一个.c文件中,你忘了告诉编译器(因此没有编译),ArrayIntStorage是一个仅头文件库(因此没有其他.c文件),在这种情况下,您可能忘记实现函数
sortOwn()
,并且只声明了它 .ArrayIntStorage是一个尚未链接的外部库 . (如Tomalak Geretkal Notes,并按照paxdiablo规定的步骤解决)
如果它们都不是这些,或者您发现这些选项令人困惑,请发送头文件
ArrayIntStorage.h
和相应的.c文件(如果有的话) .这是一个链接器错误,一旦您理解了该过程,就可以轻松解决 .
通过
#include
-ing源代码中的头文件,可以让编译器知道它需要的定义 .但是,需要额外的步骤 . 您必须将所有各种目标文件和库链接在一起 .
这是因为,虽然 Headers 包含有关
ArrayIntStorage
内容的信息,但实际代码却在其他地方 . 那个's what'在链接阶段买进了 .基本上,您需要确保构建过程中包含目标文件或库 .
例如,以下
gcc
命令将包含abc.o对象模块,并从libxyz.a
归档库中引入所需的任何内容:对于不同的环境,它也可以不同地完成 . 例如,IDE很可能在某种项目设置下使用它 .
This answer提供了许多环境中常见的编译和链接过程的更多信息 .