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

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

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

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

14.09.2011, 16:39. Просмотров 513. Ответов 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++
C++ Вызов функций класса Dictionary функциями дружественного класса
C++ Статическое поле класса, имеющее тип того же класса
C++ Разное значение переменной класса, в разных экземплярах класса
Утилизация класса (размещение класса в другом файле) C++
C++ Не удается обратиться к свойству класса из метода класса
C++ Как полю класса А обратится к приватной функции класса А?
Нужен пример неизменяемого класса и класса от которого нельзя наследоваться C++
C++ Как дополнить функционал класса из другого класса
Составьте программу, выводящую на экран сообщения об отличниках класса, о средней успеваемости учащихся класса C++
Обработка метода класса в зависимости от типа данного класса C++
Объявление объекта класса fstream в качестве статической компоненты другого класса C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 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, если он не знает размеры входящих в него полей?!
Yandex
Объявления
14.09.2011, 19:46     Предобьявление класса
Ответ Создать тему
Опции темы

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