可能重复:
什么是未定义的引用/未解决的外部符号错误,如何修复?
试图通过g-oprog1 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
main.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;
}
搞砸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);
};
有什么想法吗?使用此函数构建具有设置大小的哈希表。
编辑:散列。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-omain.cpphash. o-std=c 0x
不知怎的,它进入了一个无限循环。
您的错误表明您没有使用insert
函数的定义编译文件。更新您的命令以包含包含该函数定义的文件,并且该文件应该可以工作。
您的头文件Hash. h
声明了类hash
应该是什么样子,但没有声明它的实现,它(大概)在我们称之为Hash.cpp
的其他源文件中。通过在主文件中包含头,编译器在编译文件时会被告知class Hash
的描述,但不知道class Hash
实际上是如何工作的。当链接器试图创建整个程序时,它会抱怨找不到实现(toHash::插入(int, char)
)。
解决方案是在创建实际的二进制程序时将所有文件链接在一起。使用g前端时,可以通过在命令行上同时指定所有源文件来完成此操作。例如:
g++ -o main Hash.cpp main.cpp
将创建名为“main”的主程序。
可能重复: 什么是未定义的引用/未解决的外部符号错误以及如何修复它? 尝试通过编译我的程序 我得到了错误: 不知怎么会进入一个无限循环。
问题内容: 我可以毫无问题地创建一个共享库。我创建了libcbitcoin.so(没有错误),并尝试通过可执行文件以及OpenSSL库与之链接。我使用以下命令: bin目录是库的位置。obj目录包含我希望链接到可执行文件的目标文件。在命令中,我使用-L,-l和- rpath选项,我认为这是在Linux中进行链接所需的全部。由于出现类似以下的错误,看来我错了: 在库中找到CBNewByteArray
我想知道有没有人能帮我解决这个问题--我才刚接触C++,它给我带来了很多麻烦。 我正在尝试制作相对简单的套牌和卡类对象。 错误出现在“deck.cpp”中,它声明了一个卡片数组,然后我尝试用卡片对象填充数组。它说有对、和的未定义引用。 卡d.h Card.cpp
问题内容: 我在使用C ++(Eclipse)的Linux中工作,并且想要使用一个库。Eclipse显示了一个错误: 你知道解决方案吗? 这是我的代码: 问题答案: 您必须针对libdl进行链接,添加 -ldl 到您的链接器选项
我有一个测试文件(仅用于链接测试),在该文件中,我用自己的/库重载/
问题内容: 我对Ubuntu相当陌生,但似乎无法使它正常工作。它可以在我的学校计算机上正常工作,我不知道自己在做什么。我检查了 usr / include 和time.h就好了。这是代码: 我正在使用CodeBlocks作为我的IDE来进行构建和运行。任何帮助都会很棒,谢谢。 问题答案: 添加到g ++命令行的末尾。该链接在librt.so“实时”共享库中。