powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблема с деструктором
18 сообщений из 18, страница 1 из 1
Проблема с деструктором
    #33471784
Zmiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На с++ пишу буквально несколько дней, раньше с этим языком не сталкивался, поэтому не судите строго. Пишу программу, где используются классы и все это в h файле хранится. Вот в таком коде:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#include "myclasses.h"
...

case  1 :
                              cout << "Point constructor.\n";
                              cout << "Enter coordinates X, Y:";
                              int X;
                              int Y;
                              cin >> X >> Y;
                              Point pt = Point::Point(X, Y);
                              break;
Код класса Point:
Код: plaintext
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.
class GraphicObject {
      virtual void move(int x, int y) =  0 ;
      virtual void remove() =  0 ;
};
class Point: GraphicObject {
   protected:
             int x, y, color;
             bool visible; 
  public:
  
   Point(int x, int y) {
           this->x = x;
           this->y = y;
           this->color =  0 ;
   };
   void move( int a, int b ) {
            this->x = x;
            this->y = y;        
   };
   virtual void remove() {
           this->visible = false;
   };
   ~Point() {
   }; 
   
};

роде бы все логично, но получаю ошибку при компиляции [Linker error] undefined reference to `Point::~Point()'
Подскажите что я не так делаю, а то времени совсем не осталось.
...
Рейтинг: 0 / 0
Проблема с деструктором
    #33471795
BlackStar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну для начала сделайте деструктор виртуальным. :-)
И покажите как производите сборку.
--
There Ain't No Such Thing As A Free Lunch
...
Рейтинг: 0 / 0
Проблема с деструктором
    #33471798
Zmiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а можно поподробней?
...
Рейтинг: 0 / 0
Проблема с деструктором
    #33471800
Zmiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поставил virtual перед деструктором, ошибка ушла, а из-за чего она была-то?
...
Рейтинг: 0 / 0
Проблема с деструктором
    #33471821
BlackStar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если в классе есть хоть один виртуальный метод, деструктор всегда должен быть тоже виртуальным.

Ошибка скорее всего ушла из за того, что компилятор не генерил для не виртуального деструктора какого-либо кода (он вроде как инлайн), и соотвественно линкер при сборке не находил этого кода, хотя вроде как код должен был быть (раз объект разрушается, то вызывается деструктор). Увидев что деструктор виртуальный, компилятор видимо таки сгенерил код под него и линкер его скушал.

--
There Ain't No Such Thing As A Free Lunch
...
Рейтинг: 0 / 0
Проблема с деструктором
    #33471824
Zmiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо большое, хоть понятней стало.
...
Рейтинг: 0 / 0
Проблема с деструктором
    #33471852
Фотография Сергей Ильич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
class Point: public GraphicObject {
^^^
Наследуйся всегда публично, по крайней мере до тех пор пока не узнаешь что такое приватное наследование и зачем оно нужно.
...
Рейтинг: 0 / 0
Проблема с деструктором
    #33471854
Zmiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то есть надо еще public перед классом прописать?
...
Рейтинг: 0 / 0
Проблема с деструктором
    #33471868
Фотография Сергей Ильич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zmiyто есть надо еще public перед классом прописать?
Да. Иначе наследование будет приватное.
...
Рейтинг: 0 / 0
Проблема с деструктором
    #33472011
:).....
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
   void move( int a, int b ) {
            this->x = x;
            this->y = y;        
   };
Вызывает недоумение. И зачем Вы обращаетесь через this?
...
Рейтинг: 0 / 0
Проблема с деструктором
    #33472629
Zmiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а как?
...
Рейтинг: 0 / 0
Проблема с деструктором
    #33472649
BlackStar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zmiyа как?
Код: plaintext
1.
void move( int a, int b ) { x = a;  y = b; };
...
Рейтинг: 0 / 0
Проблема с деструктором
    #33472659
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zmiyа как?
поверь, то время, которое ты потратишь на выяснение всякой х...ни ты бы после прочтения пары другой глав никогда не потратил, а оно потом бы окупилось за счет большей скорости разработки. В твоем случае нужно было попросить человека разбирающегося в языке написать эту прогу, если только это не секрет фирмы.
...
Рейтинг: 0 / 0
Проблема с деструктором
    #33472702
Zmiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
во первых, я сам нацчится хочу, а во вторых это в универе нада)
...
Рейтинг: 0 / 0
Проблема с деструктором
    #33472718
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zmiyво первых, я сам нацчится хочу, а во вторых это в универе нада)
Это очень хорошее стремление. Я вот универов по С++ не заканчивал, сам учил, по книгам. Не скажу, что знаю в совершенстве, но для решения задач, которые я ставлю перед собой хватает. Неужели ты решил, что за 2 дня нахрапом освоишь хоть что-то, просто общаясь на форуме, пускай и специализированном.
Я так понял, что ты знаешь другие языки и это помогает проводить тебе аналогии между ними и С, но если те языки, которые ты знаешь не содержат в себе таких понятий как указатели на области памяти, абстрактные и виртуальные классы, конструкторы и деструкторы, то, поверь, лучше последуй моему совету, а начальнику своему скажи, что он дебил, если заставил тебя выучить С за 2 дня.
Я это говорю вовсе не потому, что мне жалко места на форуме или я такой му**к не знаю до кого докапаться, а потому, что желаю тебе освоить язык как можно безболезненно для тебя же, потому что знаю как это бывает, не понаслышке, когда приходиться менять один язык на другой.
...
Рейтинг: 0 / 0
Проблема с деструктором
    #33472852
Zmiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так начальник тут не причем вообще, проект преподу сдавать) А вот про классы разные действительно знаю маловато. Поэтому и решил схожую програмку с паскаля переписать на с++, сам язык то понятен в основах, а вот опыта никакого на нем. Ну все равно спасибо за совет.
...
Рейтинг: 0 / 0
Проблема с деструктором
    #33473079
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Деструктор не надо делать виртуальным. Его надо выкинуть вообще из класса Point.
...
Рейтинг: 0 / 0
Проблема с деструктором
    #33473126
nikname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Виртуальным должен быть деструктор в базовом классе.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблема с деструктором
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]