Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 15.04.2020
Сообщений: 5

main.cpp:(.text+0x1f4): undefined reference to `Queue<int>::~Queue()

02.10.2021, 18:45. Показов 991. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Выдаёт ошибку о проблеме деструктора. Пытался саму функцию destroy вставить в деструктор, но то же самое. Изначально destroy находилась в private, но перемещение тоже ничего не поменяло.

main.cpp
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
#include <iostream>
#include "module.h"
using namespace std;
 
int main(){
  Queue<int> Q1;
 
  Q1.push(15);
  Q1.push(18);
  Q1.push(18);
  Q1.push(18);
  Q1.push(1);
  Q1.push(8);
  Q1.push(11);
  Q1.push(4);
  Q1.print();
 
  int d;
  d = Q1.pop();
  d = Q1.pop();
  d = Q1.pop();
  d = Q1.pop();
  Q1.print();
  cout << "d = " << d << endl;
 
  Queue<int> Q3 = Q1;
  Q3.print();
 
  Queue<int> Q4;
  Q4 = Q3 = Q1;
  Q4.print();
 
  cout << "count = " << Q4.size() << endl;
  Q4.destroy();
  Q4.print();
 
  
  return 0;
}
module.h
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#ifndef HEADER_H
#define HEADER_H
 
#include <iostream>
#include <string>
#include <iomanip>
#include <sstream>
#include <stdlib.h>
 
using namespace std;
 
 
template <typename T>
class Queue
{
public:
    Queue(); 
    Queue(Queue const & a); 
    void push(T item);
    T pop();
    void print() const;
    Queue<T> &operator= (Queue<T> const &a);
    T &operator[](int k) const;
    ~Queue();
    int size() const{
        int i = 0;
        for (node *t = q;t;t = t->link)
            i++;
        //cout << endl;
        return i;
    }
private:
    struct node{
        T info;
        node *link;
    };
    node *q;
    
    T *QueueToMass() const;
    
    void destroy(){
        node *x;
        while (q){
            x = q;
            q= q->link;
            delete x;
        }
        q = NULL;
    }
};
 
template <typename T>
Queue<T>::Queue(){
    q = NULL;
}
 
template <typename T> 
Queue<T>::Queue(Queue const & a)
{
    T *M = a.QueueToMass();
    for (int i = 0;i < a.size();i++) 
        push(M[i]);
    delete[] M;
}
 
template <typename T>
Queue<T>::~Queue(){
    destroy();
}
 
template <typename T>
void Queue<T>::push(T item){
  node *pitem = new node;
  node *b;
  pitem->info = item;
  pitem->link = NULL;
  if (q){
    b = q;
    while (b->link){
        b = b->link;
      }
    b->link = pitem;
  } else {
    q = pitem;
  }
}
 
template <typename T>
T Queue<T>::pop(){
  T rez, m;
  node *t = q;
  m = t->info;
  rez = q->info;
  q = q->link;
  delete t;
  return m;
}
 
// Ôóíêöèÿ, âûâîäÿùàÿ î÷åðåäü íà ýêðàí
template <typename T>
void Queue<T>::print() const {
    for (node *t = q; t ; t = t-> link){
        cout << t-> info << " ";
    }
    cout << endl;
}
 
template <typename T>
T * Queue<T>::QueueToMass() const {
    T *Mass = new T [size()];
    int i = 0;
    for (node *t = q; t; t = t->link, i++){
        Mass[i] = t->info;
    }
    return Mass;
    delete[]Mass;
}
 
template <typename T>
ostream & operator<<(ostream &out, const Queue<T>  &t)
{
    int y = t.size();
    for (int i = 0;i < y; i++)
    {
        out << " " << t[i] << " ";
    }
    return out << "\n";
}
 
template <typename T>
Queue<T> & Queue<T>::operator=(Queue const &a)
{
    int l = a.size();
    if (&a == this) return *this;
    //int *M1 = a.QueueToMass();
    destroy();
    for (int i = 0;i < l;i++)
    {
        push(a[i]);
    }
    return *this;
}
#endif
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.10.2021, 18:45
Ответы с готовыми решениями:

(.text+0x20): undefined reference to `main'
Написал программу для решения задачки. Компилирую, мне выдаёт Это(см. ниже). Смотрел ответы на идентичную ошибку, но они мне не подходят...

Ошибка: program.cpp:(.text+0xf): undefined reference to
Пытаюсь собрать программу, #include &lt;iostream&gt; #include &lt;shogun/base/init.h&gt; int main(int argc, char** argv) ...

[ERROR] id returned 1 exit status | main.c:(text.startup+0xa7):undefined reference to 'WinMain@16'
Здравствуйте. Помогите узнать в чем ошибка. По ходу с компилятором что-то не так. . . использую Dev C++ #include &lt;iostream&gt; ...

6
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
02.10.2021, 18:56
Цитата Сообщение от nothink Посмотреть сообщение
Выдаёт ошибку о проблеме деструктора
и какой текст ошибки?

Добавлено через 3 минуты
увидел. в вашем коде такой ошибки не должно быть, а вот на operator [] ругается, да и destroy() тут использован, хотя он private.
Цитата Сообщение от nothink Посмотреть сообщение
Q4.destroy();
0
0 / 0 / 0
Регистрация: 15.04.2020
Сообщений: 5
02.10.2021, 20:29  [ТС]
Вот текст ошибки. А как в односвязном методе решения сделать правильно деструктор? Разницы destroy в public и в private компилятор не показывает. Решаю это всё в Dev Cpp

main.cpp.text+0x1dc): undefined reference to `Queue<int>::~Queue()'
main.cpp.text+0x1e8): undefined reference to `Queue<int>::~Queue()'
main.cpp.text+0x1f4): undefined reference to `Queue<int>::~Queue()'
main.cpp.text+0x207): undefined reference to `Queue<int>::~Queue()'
main.cpp.text+0x218): undefined reference to `Queue<int>::~Queue()'
main.cpp.text+0x229): more undefined references to `Queue<int>::~Queue()' follow
main.cpp.text$_ZN5QueueIiEaSERKS0_[_ZN5QueueIiEaSERKS0_]+0x4c): undefined reference to `Queue<int>::operator[](int) const'
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
02.10.2021, 20:40
Ошибка выдается совсем другая
Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ "public: int & __thiscall Queue<int>::operator[](int)const " (??A?$Queue@H@@QBEAAHH@Z) в функции "public: class Queue<int> & __thiscall Queue<int>::operator=(class Queue<int> const &)" (??4?$Queue@H@@QAEAAV0@ABV0@@Z) test1.obj
0
0 / 0 / 0
Регистрация: 15.04.2020
Сообщений: 5
02.10.2021, 21:00  [ТС]
В любом случае я не могу понять, что нужно нужно изменить для работы данной программы. Ошибка выдается, но в чём конкретно проблема данных методов, я увы не понимаю.
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
02.10.2021, 21:05
Цитата Сообщение от nothink Посмотреть сообщение
в чём конкретно проблема данных методов
Нельзя к элементам списка обращаться по индексу.
Т.е. в принципе, можно реализовать operator[] путем перебора элементов от начала до i-го.
Но это будет очень неэффективно.
0
0 / 0 / 0
Регистрация: 15.04.2020
Сообщений: 5
02.10.2021, 21:22  [ТС]
Сейчас откомпил, size и destroy в public. Оно работает до тех пор, пока main не доходит до копирования. Тема закрыта. Буду пробовать. Всем спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.10.2021, 21:22
Помогаю со студенческими работами здесь

Main.cpp: In function ‘int main()’: main.cpp:10:1: error: ‘then’ was not declared in this scope
Написал программу и выдает ошибку. #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main() {double a, b, x; ...

при вызове функции pow() выдаёт ошибку: test.cpp:(.text+0x59b): undefined reference to `pow'
В чём дело? Добавлено через 1 минуту ps. Заголовок math.h подключен.

[Linker error] undefined reference to `sterling(int, int, int)'
#include &lt;iostream&gt; using namespace std; int sterling(int,int,int); int sterling(int,int); int sterling(int); int main() { ...

Как в функции-члене int Queue::get() реализовать оповещение пользователя о том, что очередь заполнена?
Ребята, делаю пример из книги, в котором необходимо создать очередь. Вот код: Queue.h #pragma once #include &lt;iostream&gt; ...

C:\tsserver\Projects\cpp\codeblocks\MyComp\IDE\IDE\IDE.cpp|3 9|undefined reference to `GetStockObject@4'|
C:\tsserver\Projects\cpp\codeblocks\MyComp\IDE\IDE\IDE.cpp|39|undefined reference to `GetStockObject@4'|


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru