Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Hunter13ua
46 / 46 / 5
Регистрация: 25.10.2011
Сообщений: 183
#1

Unresolved external symbol - C++

28.02.2014, 00:51. Просмотров 757. Ответов 17
Метки нет (Все метки)

Код
Error	1	error LNK2001: unresolved external symbol "public: void __thiscall Lab3::HashTable::addElement(char *,char *,float)" (?addElement@HashTable@Lab3@@QAEXPAD0M@Z)	C:\Users\Hunter13ua\Desktop\Hash\Hash\Hash.obj	Hash
header file
C++
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
#ifndef HASHTABLE_H
#define HASHTABLE_H
 
namespace Lab3 {
 
    struct Node {
        char* first_name;
        char* last_name;
        float average_mark;
        Node* next;
 
        Node(): first_name(0), last_name(0), next(0){};
        Node(char*,char*,float);
        void pushBack(Node*);
    };
 
    class HashTable {
    public:
        // Constructors & Destructor
        HashTable() : M(13), N(0) { hash = new Node [M]; };
        HashTable(size_t m) : M(m), N(0) { hash = new Node [M]; };
        ~HashTable() { delete [] hash; }
        //
        void addElement(char*,char*,float);
    protected:
        size_t M; // Size of Hash Table
        size_t N; // Number of elements in Hash Table
 
        Node * hash; // Main hash array
    private:
        size_t findKey(Node*); // returns a key
        HashTable(HashTable&); // Block copy c-tor
    };
 
};
 
#endif //HASHTABLE_H

realization
C++
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
42
43
44
45
46
#include "HashTable.h"
#include <cstdlib>
#include <cstring>
using namespace Lab3;
 
//=================================================================
//===========Node functions
 
// Node constructor
Node::Node(char* name, char* surname, float mark)
{
    size_t len = strlen(name);
    this->first_name = new char [len];
    strcpy(name, first_name);
 
}
 
// Pushing to the end of the list
void Node::pushBack(Node* node)
{
    Node* carriage = this;
    while ( carriage->next )
        carriage = carriage->next;
    carriage->next = node;
}
 
//=================================================================
//============Hash Table ===
 
// Function calculates a key for a new element and returns it
size_t HashTable::findKey(Node* node)
{
    size_t result = 0;
    for( size_t i = 0; i < strlen(node->first_name); i++)
        result += (size_t) first_name[i];
    for( size_t i = 0; i < strlen(node->last_name); i++)
        result += (size_t) last_name[i];
    return result % M;
}
 
// Function adds new element to the hash table
void HashTable::addElement(char* name, char* surname, float mark)
{
    Node* new_node = new Node(name, surname, mark);
    hash[findKey(new_node)].pushBack(new_node);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.02.2014, 00:51     Unresolved external symbol
Посмотрите здесь:

unresolved external symbol - C++
в glm.h сидят структуры вида struct Vector2D; struct Vector3D; struct Vector4D; struct Matrix2D; struct Matrix3D; struct...

Unresolved external symbol - C++
Читаю книгу по программированию в MFC, хоть она и 13летней давности В общем дошол до создания окна через Resource и создание класса для...

Unresolved external symbol - C++
В общем, стандартная ошибка линкера: 5&gt;lib1.lib(a.obj) : error LNK2001: неразрешенный внешний символ &quot;_lol&quot; В a.c написана...

Unresolved external symbol - C++
Error 1 error LNK2001: unresolved external symbol &quot;class std::basic_ostream&lt;char,struct std::char_traits&lt;char&gt; &gt; &amp; __cdecl operator&lt;&lt;(class...

unresolved external symbol - C++
Доброе время собственно не понимаю почему компилатор ругается. Файлы : main.cpp #include &quot;Header.h&quot; #include &lt;stdio.h&gt; #include...

Unresolved external symbol - C++
Чем больше я сталкиваюсь с этой ошибкой и чем больше решаю её, тем непонятнее она становится. Скопировал код из одного проекта VS в другой,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
28.02.2014, 01:09     Unresolved external symbol #2
Цитата Сообщение от Hunter13ua Посмотреть сообщение
result += (size_t) first_name[i];
Как до линковки дошло дело, когда first_name переменная не объявлена?
Hunter13ua
46 / 46 / 5
Регистрация: 25.10.2011
Сообщений: 183
28.02.2014, 01:32  [ТС]     Unresolved external symbol #3
Vourhey, спасибо за замечание. Не заметил, что пропустил "node->". И еще кое-где точку с запятой. Но ошибка всё та же: линковка не проходит. Уже пол часа залипаю в код, не вижу.
Доп. информация: visual studio 2010.
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
28.02.2014, 01:55     Unresolved external symbol #4
Цитата Сообщение от Hunter13ua Посмотреть сообщение
Не заметил, что пропустил "node->"
Зачем сюда выкладывать код, который не соответствует ошибке?
Цитата Сообщение от Hunter13ua Посмотреть сообщение
Но ошибка всё та же: линковка не проходит.
Пока я вижу только код, в котором еще компиляция проходить не будет. Выкладывай нормальный код. Показывай, как используешь свой класс.
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
28.02.2014, 01:59     Unresolved external symbol #5
Цитата Сообщение от Hunter13ua Посмотреть сообщение
Уже пол часа залипаю в код, не вижу.
Это точно полный код, который у вас не работает? Вы там ничего не "выкусили" из него?

ЗЫ. У вас там полно лишних точек с запятыми, после завершающей скобки неймспейса, после тела некоторых методов в классе. Там они не нужны. Но это так, по ходу дела.
Hunter13ua
46 / 46 / 5
Регистрация: 25.10.2011
Сообщений: 183
28.02.2014, 02:03  [ТС]     Unresolved external symbol #6
Если поможет - вот код "основной" программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Hash.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
using namespace std;
using namespace Lab3;
 
int _tmain(int argc, _TCHAR* argv[])
{
    HashTable table1;
    table1.addElement("Olexandr", "Zhytaryuk", 13.0);
 
    cin.get();
    return 0;
}
Вот с этим всем и запускается с выдачей последующей ошибки. Обо всем остальном вижуал молчит. ( в stdafx только хедеры подключены )

Добавлено через 1 минуту
Код полный. Ctrl + A, Ctrl + C, Ctrl + V. После запуска выдаёт только 1 эту ошибку.
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
28.02.2014, 02:04     Unresolved external symbol #7
В качестве туманного предположения:
Уберите using namespace Lab3; Вместо этого сделайте обрамление всех функций в namespace (как в заголовочном файле обрамлен класс).
C++
1
2
3
4
namespace Lab3
{
    // методы
}
Вообще злоупотреблять using namespace`ами я бы не советовал.
Hunter13ua
46 / 46 / 5
Регистрация: 25.10.2011
Сообщений: 183
28.02.2014, 02:11  [ТС]     Unresolved external symbol #8
DrOffset, ничего не меняется. Пространство имён здесь ни при чем ( для проверки убрал совсем его и всё равно ничего не изменилось). На подгонку всего под пространство имён натолкнула структура с таким общим названием, как Node. Подумал, что если вдруг пригодится еще всё это, то не хочу конфликтов имён. Для этого случая: убрал Lab3. И всё та же голословная ошибка:
Код
Error	1	error LNK2001: unresolved external symbol "public: void __thiscall HashTable::addElement(char *,char *,float)" (?addElement@HashTable@@QAEXPAD0M@Z)	C:\Users\Hunter13ua\Desktop\Hash\Hash\Hash.obj	Hash
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
28.02.2014, 02:19     Unresolved external symbol #9
Hunter13ua, хах, студия. Добавь в опции, чтобы у тебя с твоим модулем линковка была. Подозреваю, что ты со своей IDE просто не линкуешь главный объектный модуль с модулем из класса.

Добавлено через 2 минуты
Поясню, как это может выглядеть в нормальном варианте:
Код
g++ -c HashTable.cpp 
g++ main.cpp HashTable.o
Разберись со средой, как там студии указывать, с кем линковаться... студией не пользуюсь, поэтому тут не помощник.
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
28.02.2014, 02:20     Unresolved external symbol #10
Цитата Сообщение от Hunter13ua Посмотреть сообщение
Пространство имён здесь ни при чем

Не по теме:

Конкретно здесь, охотно верю. Пространство имен - это хорошо, просто с using namespace нужно быть осторожным - мощный инструмент, может в некоторых ситуациях (особенно если проект большой) приводить к интересным спецэффектам. Конкретно ваш случай выстрелил бы, если бы был еще один using namespace где-то выше по коду (например в другом заголовке) и там были бы совпадающие имена (или какая-нибудь опечатка, которая не нарушала компиляцию, однако приводила в последствии к ошибке в логике софта). Просто сталкивался с таким.



Может вы целиком проект в архивчике кинете, да мы посмотрим? А то у меня лично ваш код прекрасно собирается.
Hunter13ua
46 / 46 / 5
Регистрация: 25.10.2011
Сообщений: 183
28.02.2014, 02:28  [ТС]     Unresolved external symbol #11
DrOffset, да, прошу.
В крайнем случае, перейду обратно на иную среду разработке.
Вложения
Тип файла: 7z Hash.7z (7.15 Мб, 3 просмотров)
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
28.02.2014, 02:30     Unresolved external symbol #12
Цитата Сообщение от Hunter13ua Посмотреть сообщение
В крайнем случае, перейду обратно на иную среду разработке.
Зачем? Научись правильно собирать проект и все. А то так и будешь вечно от одной среды к другой.
Если ты будешь собирать только главный модуль, то получишь свою ошибку. Линковщик не будет знать, где ему искать реализацию. Что у тебя и происходит.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.02.2014, 02:31     Unresolved external symbol #13
Такое впечатление, что это не весь код. В main() есть cin.get(), но в коде не видно ни #include <iostream>, ни using namespace std (без которого и strlen не будет определяться).
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
28.02.2014, 02:34     Unresolved external symbol #14
Hunter13ua, все понятно. В дерево проекта добавить надо ваши файлы, HashTable.cpp и HashTable.h
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2014, 02:36     Unresolved external symbol
Еще ссылки по теме:

Unresolved external symbol - C++
Main.cpp: #include &lt;iostream&gt; #include &quot;cone.h&quot; using namespace std; int main() { setlocale(LC_ALL, &quot;rus&quot;); float r,...

Unresolved external symbol - C++
Я понимаю что ошибка LNK2019 обычно означает что есть объявление функции, но нет ее тела. В моем случае у меня как то через раз это...

Unresolved external symbol - C++
header.h: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; class CGraphicsObject { ...

Unresolved external symbol - C++
policy.h #ifndef POLICY_H #define POLICY_H #include &lt;forward_list&gt; #include &quot;vector.h&quot; struct PolicyVector ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
28.02.2014, 02:36     Unresolved external symbol #15

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
В дерево проекта добавить надо ваши файлы
они даже не в дереве, ого...



Добавлено через 52 секунды

Не по теме:

Вот, что IDE с людьми делает...

Yandex
Объявления
28.02.2014, 02:36     Unresolved external symbol
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru