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

Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 53, средняя оценка - 4.85
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
26.02.2011, 22:21     Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ #1
Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ "public: void __thiscall EDeque<int>:ush_front(int const &)" (?push_front@?$EDeque@H@@QAEXABH@Z) в функции _main C:\Users\alex\Documents\Visual Studio 2010\Projects\project6_16v2\project6_16v2\project6_16v2.obj project6_16v2
Ошибка 2 error LNK1120: 1 неразрешенных внешних элементов C:\Users\alex\Documents\Visual Studio 2010\Projects\project6_16v2\Debug\project6_16v2.exe 1 1 project6_16v2

VC2010 три дня ищу ошибку. Компилируется вроде нормально, файлики obj лежат в папке дебаг. Бл*дь что ему надо от меня, может какие-нибудь настройки галочки тыкнуть в настройках проекта там их много? Или чем то другим собрать? Находил тут аналогичные темы, н никаких решений не нашёл.

Вот код, если он нужен(компилируется нормально)

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
// project6_16v2.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include "EDeque.h"
#include <iostream>
using namespace std;
 
int main(int argc, char* argv[])
{
    EDeque<int> test;
    int var;
 
    //for (int i = 0; i < 5; i++) {
        cin >> var;
        test.push_front(var);
    //}
 
    /*for (int i = 0; i < 5; i++) {
        cout << test[i] << endl;
    }*/
    system("pause");
 
    return 0;
}
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
//#pragma once
 
//#ifndef EDEQUE_H
//#define EDEQUE_H
 
#include "EDequeItem.h"
 
template <typename Type> class EDeque
{
    friend class EDequeItem<Type>;
public:
 
    EDeque(): begin(0), end(0) {  } //Пустой список
    /*EDeque(const EDeque &Q): begin(0), end(0) { //Инициализация копии
        copy(Q);
    }*/
    //EDeque& operator=(const EDeque&);
    /*Type &operator[](const size_t index) {
        return begin[index];
    }*/
 
    void push_back(const Type &value); //Добавляет элемент в конец
    void push_front(const Type &value); //В начало
 
    void pop_back();
    void pop_front();
 
    bool empty() {
        return (begin == 0);
    }
 
    void erase();
 
    /*~EDeque() {
        destroy();
    }*/
private:
    EDequeItem<Type> *begin;
    EDequeItem<Type> *end;
 
    //EDequeItem *vector;
    /*void copy(const EDeque&);*/
};
//#endif
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
47
48
49
50
51
52
53
54
55
56
57
#include "StdAfx.h"
#include "EDeque.h"
 
 
/*template <typename Type> EDeque::EDeque(void)
{
}*/
 
template <typename Type> void EDeque<Type>::push_back(const Type &value) {
    EDequeItem<Type> *pt = new EDequeItem(value);
 
    if (empty()) {
        begin = pt;
        end = pt;
    }
    else {
        end->next = pt; //Настройка ссылки на следующий элемент у (бывшего) последнего элемента
        end = pt; // Последний элемент ссылается на только что добавленный
    }
}
 
template <typename Type> void EDeque<Type>::push_front(const Type &value) {
    EDequeItem<Type> *pt = new EDequeItem<Type>(value);
 
    if (empty()) {
        begin = end = pt;
    }
    else {
        begin->prev = pt;
        begin = pt;
    }
}
 
template <typename Type> void EDeque<Type>::erase() {
    while (!empty()) {
        pop_back();
    }
}
 
template <typename Type> void EDeque<Type>::pop_back() {
    EDequeItem<Type>* pt = end;
    end = end->prev; //Теперь энд указывает на предыдущий объект класса EDequeItem!
    delete pt; //Можно удалить объект ссылавшийся на энд
}
 
template <typename Type> void EDeque<Type>::pop_front() {
    EDequeItem<Type>* pt = begin;
    begin = begin->next; //Теперь бегин указывает на следующий объект класса EDequeItem!
    delete pt; //Можно удалить объект ссылавшийся на энд
}
 
 
 
/*template <typename Type> EDeque::~EDeque(void)
{
}
*/
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//#pragma once
//#ifndef EDEQUEITEM_H
//#define EDEQUEITEM_H
 
template <typename Type> class EDequeItem 
{
private:
    EDequeItem(const Type &t): item(t), prev(0), next(0) { }
    Type item; //Элемент очереди
    EDequeItem *next; //Ссылка на следующий
    EDequeItem *prev; //На предыдущий
};
 
//#endif
да кстати не писал ничего в EDequeItem.cpp если это имеет значение
помогите пожалуйста кто чем может
p.s кое чё я заккоментил в надежде что глюк уйдёт
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2011, 22:21     Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ
Посмотрите здесь:

Не могу разобраться где ошибка!error LNK2019: ссылка на неразрешенный внешний символ C++
Ошибка линковщика(error LNK2019: ссылка на неразрешенный внешний символ _main в функции ___tmainCRTStartup) C++
C++ Структуры/Работа с файлами(ошибка линковщика error LNK2019: ссылка на неразрешенный внешний символ)
Ошибка линковки - error LNK2019: ссылка на неразрешенный внешний символ C++
Ошибка error LNK2019: ссылка на неразрешенный внешний символ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
27.02.2011, 07:52     Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ #2
Помести описание класса и его реализацию в один хидер.
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
27.02.2011, 09:51  [ТС]     Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ #3
Спасибо kazak, перенёс всё что было в EDeque.cpp в EDuque.h и поместил сразу после class { }; тут. Но появилась неожиданно ещё одна проблема - он написал что мол не может обратиться к private члену класса EDequeItem в функции pushback, я же вроде поставил friend. Заменил на public - заработало. Всё таки в чём проблема? почему я не могу отдельно написать спп и хидер это раз, а во вторых почему он залупится на привэйт, когда класс дружественный?
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
27.02.2011, 12:55     Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ #4
Цитата Сообщение от pito211 Посмотреть сообщение
почему я не могу отдельно написать спп и хидер это раз
это особенности написания шаблонов
Цитата Сообщение от pito211 Посмотреть сообщение
во вторых почему он залупится на привэйт, когда класс дружественный?
чтобы Edeque имел доступ к членам EDequeItem, дружественным нужно объявлять Edeque, а не наоборот.
Yandex
Объявления
27.02.2011, 12:55     Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ
Ответ Создать тему
Опции темы

Текущее время: 04:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru