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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
TonyTaponi
1 / 1 / 0
Регистрация: 16.11.2010
Сообщений: 7
#1

Предобьявление класса - C++

14.09.2011, 16:39. Просмотров 520. Ответов 2
Метки нет (Все метки)

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
#ifndef MTGRAPH_H
#define MTGRAPH_H
 
class Point;
 
class MTGraph
{
 private :
     
   Point StartPoint;
   Point FinishPoint;
};
 
/****************************************************************
*
****************************************************************/
 
class Point
{
  public :
    
   int x;
   int y;
   
   Point(int x, int y)
   {
     this->x = x; this->y = y;
   }
   
   Point()
   { x = 0; y = 0; }
   
};
 
#endif // MTGRAPH_H
Здравствуйте, у меня следующая проблема: в программе происходит предварительно объявление класса Point, затем в другом классе объявляются две переменные этого типа. Компилятор выдает на них ошибку: field has incomplete type. Если перенести описание класса в начало, то все работает. Нужно что-то дополнительно предобьявить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.09.2011, 16:39     Предобьявление класса
Посмотрите здесь:

Нужен пример неизменяемого класса и класса от которого нельзя наследоваться - C++
Здравствуйте! Нужно привести пример неизменяемого класса и класса от которого нельзя наследоваться.

Составьте программу, выводящую на экран сообщения об отличниках класса, о средней успеваемости учащихся класса - C++
Опишите, используя структуру записи, школьный журнал. Предусмотрите в записи поля для хранения информации о фамилии учащегося, предмете,...

Вызов функций класса Dictionary функциями дружественного класса - C++
Функции класса Tree используют функции дружественного класса Dictionary,но вылетают ошибки,не находятся определения функций класа...

Разное значение переменной класса, в разных экземплярах класса - C++
Вот примерный код: class Test { private: static int countC; static int countD; void initWeight(){ double a; ...

Как полю класса А обратится к приватной функции класса А? - C++
Есть лифт (класс "Elevator "), в котором находится кнопка (класс "Button"). При нажатии на кнопку (функция "push") должен пойти сигнал в...

Статическое поле класса, имеющее тип того же класса - C++
Всем доброго времени суток. Как известно, поля класса могут быть ссылками, либо указателями на тот же класс, в котором объявляются, но не...

Обработка метода класса в зависимости от типа данного класса - C++
Имеется класс родителя A с методом Update(), этот класс имеет 2 дочерних класса B, C, каждый из них имеет свой метод обработки Update:...

Бинарное дерево подклассов основного класса-узла. Доступ к подклассам по указателю - объекту класса-родителя - C++
Короче, необходимо сделать бинарное дерево, решающее арифметическое выражение, предварительно туда записанное. Есть основной класс...

Как дополнить функционал класса из другого класса - C++
Вот допустим, написал я класс TMatrix (матрица), можно добавлять строки, столбцы, есть capacity и прочие ништяки. Всё отлажено и отлично...

Не удается обратиться к свойству класса из метода класса - C++
Пишу хедер для работы с файлами такой структуры: nametype1 name1 name2 name3 name4 nametype2

Получение доступа к переменным класса из другого класса - C++
Как передать по ссылке переменную из класса А в метод класса В?

Утилизация класса (размещение класса в другом файле) - C++
Здравствуйте уважаемые пользователи данного форума,прошу Вас помочь в решение данной проблемы.Пожалуйста подскажите как утилизировать...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
14.09.2011, 16:54     Предобьявление класса #2
TonyTaponi, Либо перенести в начало. Либо в MTGraph использовать указатели на объект класса Point. Либо шаблоны.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template<class TPoint>
class MTGraph
{
private:
   TPoint first;
   TPoint second;
};
 
class Point
{
};
 
MTGraph<Point> graph;
Сыроежка
Заблокирован
14.09.2011, 19:46     Предобьявление класса #3
Цитата Сообщение от TonyTaponi Посмотреть сообщение
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
#ifndef MTGRAPH_H
#define MTGRAPH_H
 
class Point;
 
class MTGraph
{
 private :
     
   Point StartPoint;
   Point FinishPoint;
};
 
/****************************************************************
*
****************************************************************/
 
class Point
{
  public :
    
   int x;
   int y;
   
   Point(int x, int y)
   {
     this->x = x; this->y = y;
   }
   
   Point()
   { x = 0; y = 0; }
   
};
 
#endif // MTGRAPH_H
Здравствуйте, у меня следующая проблема: в программе происходит предварительно объявление класса Point, затем в другом классе объявляются две переменные этого типа. Компилятор выдает на них ошибку: field has incomplete type. Если перенести описание класса в начало, то все работает. Нужно что-то дополнительно предобьявить?
Сообщение об ошибке говорит само за себя, что нельзя определять объекты неполного типа. Что это означает? Это означает, что компилятор должен знать размер этих объектов. Когда вы сделали предварительное объявление имени класса, размер этого класса не известен, а потому компилятор не может использовать объекты этого класса в определении другого класса, так как он не сможет подсчитать размер этого нового класса. То есть возникает вопрос относительно вашего определения: каков будет размер класса MTGraph?! Как компилятор может определить и сгенерировать соответствующий объектный код для выделения памтяи для класса MTGraph, если он не знает размеры входящих в него полей?!
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru