Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблема с деструктором / 18 сообщений из 18, страница 1 из 1
08.01.2006, 15:02
    #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
08.01.2006, 15:13
    #33471795
BlackStar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с деструктором
Ну для начала сделайте деструктор виртуальным. :-)
И покажите как производите сборку.
--
There Ain't No Such Thing As A Free Lunch
...
Рейтинг: 0 / 0
08.01.2006, 15:16
    #33471798
Zmiy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с деструктором
а можно поподробней?
...
Рейтинг: 0 / 0
08.01.2006, 15:18
    #33471800
Zmiy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с деструктором
поставил virtual перед деструктором, ошибка ушла, а из-за чего она была-то?
...
Рейтинг: 0 / 0
08.01.2006, 15:36
    #33471821
BlackStar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с деструктором
Если в классе есть хоть один виртуальный метод, деструктор всегда должен быть тоже виртуальным.

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

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


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