Неопределенная ссылка на функцию заголовочного файла

0

Я получил ошибку C:\temp\hashTableProject\main.cpp|14| undefined ссылка на hash::Hash(std::string) Кто-нибудь знает, как решить эту проблему?

hash.h

#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;

#ifndef HASH_H
#define HASH_H

class hash{
public:

    int Hash(string key);
};

#endif // HASH_H

hash.cpp

#include <iostream>
#include <cstdlib>
#include <string>

#include "hash.h"

using namespace std;


int hash::Hash(string key){

    //int hash = 0;
    int index;
    index = key.length();

    return index;
}

main.cpp

#include <iostream>
#include <cstdlib>
#include <string>

#include "hash.h"

using namespace std;

int main()
{
    int index;
    hash hashOb;
    string traget = "Testing";
    index = hashOb.Hash(traget);

    cout << index << endl;

    return 0;
}

Im с использованием CodeBlock 13.12 В папке obj есть только файл main.o. Я не знаю, почему hash.o там нет.

  • 2
    Я бы посоветовал вам начать использовать разные имена вместо того, чтобы играть с заглавными буквами, код довольно трудно читать таким образом. Также нет необходимости повторять все эти повсюду. Просто включите то, что вам нужно. Также защита ifndef должна быть для всего файла (включая #include), а не только для класса. И «использование пространства имен std» является плохой практикой и может быть причиной этого, поскольку существует std :: hash (хотя afaik его нет в этих заголовках). Возможно, вам следует прочитать некоторые вводные книги по C ++.
  • 0
    Похоже, вам нужно явно добавить файл hash.cpp в ваш проект блоков кода.
Показать ещё 2 комментария
Теги:
hash
reference
header-files

1 ответ

1
Лучший ответ

hash - встроенный шаблон в пространстве имен std.

Попробуйте удалить с помощью пространства имен std; залоговое право и использовать имя пространства имен по мере необходимости.

  • 0
    Хотя это хороший совет, я не думаю, что это является причиной конкретной проблемы ОП.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню