Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/48: Рейтинг темы: голосов - 48, средняя оценка - 4.65
187 / 174 / 18
Регистрация: 22.03.2010
Сообщений: 612
1

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

26.02.2011, 22:21. Показов 9102. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ошибка 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 кое чё я заккоментил в надежде что глюк уйдёт
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.02.2011, 22:21
Ответы с готовыми решениями:

Ошибка error LNK2019: ссылка на неразрешенный внешний символ
Здравствуйте, не уверен в эту ли тему пишу, но в теме специализированой по OpenGL мне ни кто ничего...

Ошибка: error LNK2019: ссылка на неразрешенный внешний символ...
Не могу понять ошибку в своей программе! Ничего красным не подчёркивается, но программа не...

Ошибка error LNK2019: ссылка на неразрешенный внешний символ
Здравствуйте! Помогите пожалуйста! Компоновщик выдаёт ошибку error LNK2019: ссылка на...

Ошибка линковки - error LNK2019: ссылка на неразрешенный внешний символ
Что может быть не так? есть файл test.h #ifndef _T_ #define _T_ template&lt;class T&gt; class...

3
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,168
27.02.2011, 07:52 2
Помести описание класса и его реализацию в один хидер.
1
187 / 174 / 18
Регистрация: 22.03.2010
Сообщений: 612
27.02.2011, 09:51  [ТС] 3
Спасибо kazak, перенёс всё что было в EDeque.cpp в EDuque.h и поместил сразу после class { }; тут. Но появилась неожиданно ещё одна проблема - он написал что мол не может обратиться к private члену класса EDequeItem в функции pushback, я же вроде поставил friend. Заменил на public - заработало. Всё таки в чём проблема? почему я не могу отдельно написать спп и хидер это раз, а во вторых почему он залупится на привэйт, когда класс дружественный?
0
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,168
27.02.2011, 12:55 4
Цитата Сообщение от pito211 Посмотреть сообщение
почему я не могу отдельно написать спп и хидер это раз
это особенности написания шаблонов
Цитата Сообщение от pito211 Посмотреть сообщение
во вторых почему он залупится на привэйт, когда класс дружественный?
чтобы Edeque имел доступ к членам EDequeItem, дружественным нужно объявлять Edeque, а не наоборот.
1
27.02.2011, 12:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.02.2011, 12:55
Помогаю со студенческими работами здесь

Переопределение операции. Ошибка Error LNK2019: ссылка на неразрешенный внешний символ
Возникает такая ошибка: 1 error LNK2019: ссылка на неразрешенный внешний символ &quot;public: class...

Ошибка при написании класса: error LNK2019: ссылка на неразрешенный внешний символ
Код: int _tmain(int argc, _TCHAR* argv) { Fraction x, x2, y, y2, fl, res, c; cout &lt;&lt;...

Не могу разобраться где ошибка!error LNK2019: ссылка на неразрешенный внешний символ
#include &quot;stdafx.h&quot; #include &quot;conio.h&quot; #include &quot;stdio.h&quot; #include &quot;stdlib.h&quot; #include...

Ошибка линковщика(error LNK2019: ссылка на неразрешенный внешний символ _main в функции ___tmainCRTStartup)
#include &lt;iostream&gt; using namespace std; void rotor(int *a,int k,int len) { // Создаем и...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru