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

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

Восстановить пароль Регистрация
 
TonyTaponi
1 / 1 / 0
Регистрация: 16.11.2010
Сообщений: 7
14.09.2011, 16:39     Предобьявление класса #1
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++
как узнать,является данный объект класса А1 наследником класса А2 C++
Как получить private переменную класса, функцей членом другого класса C++
Использование объекта одного класса при создании нового класса C++
Как обраиться к функции класса через другую функцию класса (друга)? C++
Передача свойства одного экземпляра класса другому экземпляру класса C++
Как получить доступ к методам класса, который содержится в векторе класса C++
Как обратится к обьекту класса, являющегося наследником абстрактного класса C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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     Предобьявление класса
Ответ Создать тему
Опции темы

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