链接器错误C ++“未定义引用”

Linker Error C++ “undefined reference ”

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What is an undefined reference/unresolved external symbol error and how do I fix it?

试图通过g++ -o prog1 main.cpp -std=c++0x编译我的程序

我得到错误:

1
2
3
/tmp/cc1pZ8OM.o: In function `main':
main.cpp:(.text+0x148): undefined reference to `Hash::insert(int, char)'

collect2: error: ld returned 1 exit status

主CPP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <functional>
#include"Hash.h"

using namespace std;

int main(int argc, char *argv[]) {
//preset prime number
int prime = 101;
hash<char> h1;
int key;
Hash HashTable;

// check for Request & string parameters
if(argc != 3) {
    cout <<"Run program with 2 parameters. [Lower Case]" << endl;
    cout <<"[1] insert, find, or delete" << endl;
    cout <<"[2] string" << endl;
}

if(strcmp(argv[1],"insert") == 0) {
    //Get Hash for argv[2] aka value
    key = h1(*argv[2]);

    //check 1
    cout <<"Hash:" << key << endl;

    key = key % prime;

    //check 2
    cout <<"Mod 101 Hash:" << key << endl;

    HashTable.insert(key, *argv[2]); //PROBLEM here

}

return 0;
}

哈希.h文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cstring>
#include"LinkedList.h"
using namespace std;

class Hash {
//100 slot array for hash function
LinkedList *hashFN[100];

public:
void insert(int key, char value);
//void deleteItem(int key);
//char* find(int key);


};

有什么想法吗?使用此方法生成具有设置大小的哈希表。

编辑:hash.cpp文件

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <cstring>
#include"Hash.h"

using namespace std;

void Hash::insert(int key, char value){
*hashFN[key]->addFront(value);
cout <<"Success!" << endl;

}

正在尝试通过终端编译:

g++ -c Hash.cpp -o Hash.o

g++ -o prog1 main.cpp Hash.o -std=c++0x

它以某种方式进入一个无限循环。


您的头文件Hash.h声明"class hash应该是什么样的",但不是它的实现,这可能是在我们将称为Hash.cpp的其他源文件中。通过将头文件包含在主文件中,编译器在编译文件时会被告知class hash的描述,而不是class hash的实际工作方式。当链接器试图创建整个程序时,它会抱怨找不到实现(toHash::insert(int, char))。

解决方案是在创建实际的程序二进制文件时将所有文件链接在一起。当使用g++前端时,可以通过在命令行上一起指定所有源文件来完成这一操作。例如:

1
g++ -o main Hash.cpp main.cpp

将创建名为"main"的主程序。


此错误告诉您所有信息:

undefined reference toHash::insert(int, char)

您没有链接到Hash.h中定义的函数的实现。你没有一个Hash.cpp来编译和链接吗?


您的错误表明您没有使用insert函数的定义编译文件。更新您的命令以包括包含该函数定义的文件,该文件应该可以工作。