Ответ 1
Эта ошибка сообщает вам все:
undefined ссылка наHash:: insert (int, char)
Вы не связываетесь с реализациями функций, определенных в Hash.h
. У вас нет Hash.cpp
для компиляции и ссылки?
Возможный дубликат:
Что такое undefined ссылка/нерешенная внешняя ошибка символа и как ее исправить?
Попытка скомпилировать мою программу с помощью 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
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;
}
Файл 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 = С++ 0x
Он каким-то образом переходит в бесконечный цикл.
Эта ошибка сообщает вам все:
undefined ссылка наHash:: insert (int, char)
Вы не связываетесь с реализациями функций, определенных в Hash.h
. У вас нет Hash.cpp
для компиляции и ссылки?
Ваш заголовочный файл Hash.h
объявляет "что бы выглядеть class hash
", но не его реализация, которая (предположительно) в каком-то другом исходном файле мы будем называть Hash.cpp
. Включив заголовок в ваш основной файл, компилятор информируется об описании class hash
при компиляции файла, но не работает как class hash
. Когда компоновщик пытается создать всю программу, он жалуется, что реализация (toHash::insert(int, char)
) не может быть найдена.
Решение состоит в том, чтобы связать все файлы вместе при создании фактического двоичного кода программы. При использовании интерфейса g++ вы можете сделать это, указав все исходные файлы вместе в командной строке. Например:
g++ -o main Hash.cpp main.cpp
создаст основную программу под названием "main".
Где находится файл Hash.cpp? Где определение функции Hash:: insert?
В вашей ошибке показано, что вы не компилируете файл с определением функции insert
. Обновите свою команду, чтобы включить файл, содержащий определение этой функции, и он должен работать.