gpt4 book ai didi

c++ - 链接器错误 C++ "undefined reference "

转载 作者:IT老高 更新时间:2023-10-28 12:50:03 26 4
gpt4 key购买 nike

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

编译我的程序

我得到错误:

/tmp/cc1pZ8OM.o: In function `main':
main.cpp:(.text+0x148): undefined reference to `Hash::insert(int, char)'
collect2: error: ld returned 1 exit status

ma​​in.cpp

#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;
}

Hash.h 文件:

#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文件

#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。通过在主文件中包含 header ,编译器会在编译文件时获知 class Hash 的描述,而不是 class Hash 的实际工作方式。当链接器尝试创建整个程序时,它会提示找不到实现 (toHash::insert(int, char))。

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

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

将创建名为“main”的主程序。

关于c++ - 链接器错误 C++ "undefined reference ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14557657/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com