LNK2019错误C++解析外部符号
Ive得到了这些错误消息:LNK2019错误C++解析外部符号
错误1个错误LNK2019:无法解析的 外部符号? “市民:无效 __thiscall ArrayIntStorage :: sortOwn(无效)” (sortOwn @ ArrayIntStorage @@ QAEXXZ) 在功能 引用_main G:\ 08227 \ ACW \ MAIN \ 08227_ACW2_Test_Harnesses_2010-11 \ C_Style_Array \ main.obj C_Style_Array
错误2错误LNK2019:无法解析 外部符号“公共:无效 __thiscall ArrayIntStorage :: sortStd(无效)” (sortStd @ @@ ArrayIntStorage QAEXXZ?) 在功能 引用_main G:\ 08227 \ ACW \ MAIN \ 08227_ACW2_Test_Harnesses_2010-11 \ C_Style_Array \ main.obj C_Style_Array
错误3错误LNK2019:未解析 外部符号 “类 的std :: basic_ostream> & __cdecl 操作者< <(类 的std :: basic_ostream> &,类 ArrayIntStorage常量&)” (?? 6 @ YAAAV $ basic_ostream @杜?$ @ char_traits @ d性病性病@@@ @@ AAV01 @ ABVArrayInt存储@@@ Z) 在功能 引用_main G:\ 08227 \ ACW \ MAIN \ 08227_ACW2_Test_Harnesses_2010-11 \ C_Style_Array \ main.obj C_Style_Array
错误4错误LNK2019:无法解析 外部符号“类 的std :: basic_istream> & __cdecl 操作>>(类 的std :: basic_istream> &,类 ArrayIntStorage &)” (?? 5 @ YAAAV?$ @ basic_istream杜?$ @ char_traits @ d性病性病@@@ @@ AAV01 @AAVArrayIntStorage @@@ Z) 在功能中引用 _main G:\ 08227 \ ACW \ MAIN \ 08227_ACW2_Test_Harnesses_2010-11 \ C_Style_Arra Y \ main.obj C_Style_Array
错误5错误LNK2019:无法解析的 外部符号 “市民:布尔 __thiscall ArrayIntStorage :: setReadSort(布尔)” (setReadSort @ ArrayIntStorage @@ QAE_N_N @ Z?) 在功能 引用_main 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 \调试\ 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();
看来,ArrayIntStorage被编译成库。检查项目的链接器详细信息,并添加库。
您忘记链接定义了ArrayIntStorage函数的库。阅读该库的文档,了解如何在项目中使用它。
您的链接器(编译器的一部分)找不到ArrayIntStorage::sortOwn()
的定义。
这通常发生两种:
- 的
ArrayIntStorage::sortOwn()
的定义是在你忘了告诉(所以没有编译)编译另一个.c文件, - ArrayIntStorage只有一个头库(所以没有其他的.c文件),在这种情况下,您可能已经忘记了实现函数
sortOwn()
,并且只声明了它。 - ArrayIntStorage是一个尚未链接的外部库。
如果它既不这些,还是你找到这些选项混乱(如托默勒格Geretkal注意事项,并通过以下列出的paxdiablo步骤解决),请在发布的头文件ArrayIntStorage.h
和相应的.c文件(应该有一个)。
这是一个链接器错误,一旦你理解了这个过程就可以轻松解决。
通过#include
- 您的源代码中的头文件,它使编译器知道它需要的定义。
但是,还需要额外的步骤。您必须将所有不同的目标文件和库链接在一起。
这是因为,虽然标题包含有关ArrayIntStorage
东西的信息,但实际代码对于其他地方。这就是在链接阶段购买的东西。
基本上,您需要确保目标文件或库包含在构建过程中。
例如,下面的命令gcc
将包括abc.o对象模块和从libxyz.a
归档库需要什么带来:
gcc -o myprog myprog.c abc.o -L/path/to/libs -lxyz
它也可以用于不同的环境不同进行。例如,IDE很可能在某种项目设置下。
This answer提供了许多环境中常见的编译和链接过程的更多信息。