Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 16.11.2010
Сообщений: 7

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

14.09.2011, 16:39. Показов 946. Ответов 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. Если перенести описание класса в начало, то все работает. Нужно что-то дополнительно предобьявить?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.09.2011, 16:39
Ответы с готовыми решениями:

Инициализация шаблонного класса(В конструкторе класса после двоеточия вновь имя класса)
Всем доброго времени суток! Пытаюсь разобраться как работает приведенный мной код. Конкретно, пытаюсь разобраться что происходит в...

Как связать сигнал одного класса со слотом другого класса, содержащего указатель на объект этого класса?
Подскажите, пожалуйста, как связать сигнал одного класса со слотом другого класса, содержащего указатель на объект этого класса. Буду очень...

В учебном заведении три компьютерных класса. Ввести площадь каждого класса и количество компьютеров в нем. Для каждого класса вывести сообщение наруше
В учебном заведении три компьютерных класса. Ввести площадь каждого класса и количество компьютеров в нем. Для каждого класса вывести...

2
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
14.09.2011, 16:54
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;
0
Заблокирован
14.09.2011, 19:46
Цитата Сообщение от 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, если он не знает размеры входящих в него полей?!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.09.2011, 19:46
Помогаю со студенческими работами здесь

Можно ли как-то получить из одного класса исходный код другого класса?
Предположим есть два публичных класса. Один находится в одной части проекта, другой где-нибудь в другой части проекта. Мне для своих...

Почему объект производного класса не видит префиксный оператор из базового класса?
Короче создал я базовый класс с перегруженным префиксным оператором ++. Потом чтоб его затюнинговать, сделал ему производный класс с...

MFC: 2 класса, невозможно объявить поле в классе 2 типа первого класса.
Подскажите, пожалуйста, в чем ошибка Есть 1 й класс: class time { int h; int m; }

Как получить ссылку на текущий экземпляр класса внутри этого класса?
Как? Чтобы отрабатывал деструктор! и в нем можно было поиметь этот this ... Идея в том, что пишу оболочку под некоторую существующую...

Шаблон класса, параметром которого должны являться наследники определённого класса
Сразу извиняюсь за нубский вопрос. Суть в том, что я хочу сделать шаблон класса, параметром которого должны являтся наследники...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru