2011-04-20 158 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提供了許多環境中常見的編譯和鏈接過程的更多信息。

相關問題