首页 文章

LNK2019错误c未解析的外部符号

提问于
浏览
3

我收到了以下错误消息:

错误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 回答

  • 1

    似乎ArrayIntStorage被编译成一个库 . 检查项目的链接器详细信息,然后添加库 .

  • 3

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

  • 0

    您的链接器(编译器的一部分)无法找到 ArrayIntStorage::sortOwn() 的定义位置 .

    这通常发生在:

    • ArrayIntStorage::sortOwn() 的定义在另一个.c文件中,你忘了告诉编译器(因此没有编译),

    • ArrayIntStorage是一个仅头文件库(因此没有其他.c文件),在这种情况下,您可能忘记实现函数 sortOwn() ,并且只声明了它 .

    • ArrayIntStorage是一个尚未链接的外部库 . (如Tomalak Geretkal Notes,并按照paxdiablo规定的步骤解决)

    如果它们都不是这些,或者您发现这些选项令人困惑,请发送头文件 ArrayIntStorage.h 和相应的.c文件(如果有的话) .

  • 0

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

    通过 #include -ing源代码中的头文件,可以让编译器知道它需要的定义 .

    但是,需要额外的步骤 . 您必须将所有各种目标文件和库链接在一起 .

    这是因为,虽然 Headers 包含有关 ArrayIntStorage 内容的信息,但实际代码却在其他地方 . 那个's what'在链接阶段买进了 .

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

    例如,以下 gcc 命令将包含abc.o对象模块,并从 libxyz.a 归档库中引入所需的任何内容:

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

    对于不同的环境,它也可以不同地完成 . 例如,IDE很可能在某种项目设置下使用它 .

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

相关问题