2011-04-20 144 views
3

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(); 

回答

0

看来,ArrayIntStorage被编译成库。检查项目的链接器详细信息,并添加库。

0

您忘记链接定义了ArrayIntStorage函数的库。阅读该库的文档,了解如何在项目中使用它。

3

您的链接器(编译器的一部分)找不到ArrayIntStorage::sortOwn()的定义。

这通常发生两种:

  1. ArrayIntStorage::sortOwn()的定义是在你忘了告诉(所以没有编译)编译另一个.c文件,
  2. ArrayIntStorage只有一个头库(所以没有其他的.c文件),在这种情况下,您可能已经忘记了实现函数sortOwn(),并且只声明了它。
  3. ArrayIntStorage是一个尚未链接的外部库。

如果它既不这些,还是你找到这些选项混乱(如托默勒格Geretkal注意事项,并通过以下列出的paxdiablo步骤解决),请在发布的头文件ArrayIntStorage.h和相应的.c文件(应该有一个)。

1

这是一个链接器错误,一旦你理解了这个过程就可以轻松解决。

通过#include - 您的源代码中的头文件,它使编译器知道它需要的定义。

但是,还需要额外的步骤。您必须将所有不同的目标文件和库链接在一起。

这是因为,虽然标题包含有关ArrayIntStorage东西的信息,但实际代码对于其他地方。这就是在链接阶段购买的东西。

基本上,您需要确保目标文件或库包含在构建过​​程中。

例如,下面的命令gcc将包括abc.o对象模块和从libxyz.a归档库需要什么带来:

gcc -o myprog myprog.c abc.o -L/path/to/libs -lxyz 

它也可以用于不同的环境不同进行。例如,IDE很可能在某种项目设置下。

This answer提供了许多环境中常见的编译和链接过程的更多信息。

相关问题