Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Хрисипп
19 / 29 / 13
Регистрация: 09.02.2016
Сообщений: 217
#1

Можно ли сделать класс вложенным, определив его в другом файле?

27.06.2016, 22:30. Просмотров 867. Ответов 9
Метки нет (Все метки)

можно ли сделать класс вложенным, определив его в другом файле?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2016, 22:30
Ответы с готовыми решениями:

Как использовать класс описанный в другом файле
Есть проект, несколько файлов, в одном из них описаны классы. Как использовать...

Класс Date, определив в нем конструктор по умолчанию
Нужно доработать разработанный ранее класс Date, определив в нем конструктор по...

Как одному классу узнать о другом в другом файле, если они не имеют общего наследования
Есть два класса в разных файлах, первому классу нужно знать о втором и...

Разработать класс String определив для него методы
Нужно разработать класс String определив для него методы: • копирования строк,...

Разработать класс String определив для него методы
Разработать класс String определив для него методы: • копирования строк,...

9
Renji
2102 / 1543 / 470
Регистрация: 05.06.2014
Сообщений: 4,473
27.06.2016, 23:43 #2
Лучший ответ Сообщение было отмечено rikimaru2013 как решение

Решение

Можно - class MyClass; в основной файл, class BaseClass::MyClass{bla-bla-bla}; в другой файл. Но пользоваться им можно будет только заинклудив этот самый "другой файл".
1
Хрисипп
19 / 29 / 13
Регистрация: 09.02.2016
Сообщений: 217
28.06.2016, 19:07  [ТС] #3
Цитата Сообщение от Renji Посмотреть сообщение
Можно - class MyClass; в основной файл, class BaseClass::MyClass{bla-bla-bla}; в другой файл.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//  h1.h
class mainCl{
public:
class My;
};
------------------
//  h2.h 
class mainCl::My{
...sth...
};
------------------
main
{
mainCl::My obj;
}
так не работает. все заинклужено
0
Renji
2102 / 1543 / 470
Регистрация: 05.06.2014
Сообщений: 4,473
28.06.2016, 19:43 #4
Цитата Сообщение от Хрисипп Посмотреть сообщение
так не работает. все заинклужено
Не все. В h2.h #include"h1.h" добавить надо.
0
Хрисипп
19 / 29 / 13
Регистрация: 09.02.2016
Сообщений: 217
28.06.2016, 21:50  [ТС] #5
Цитата Сообщение от Renji Посмотреть сообщение
Не все. В h2.h #include"h1.h" добавить надо.
да я и написал, потому что в примере добавить забыл. так-то я их добавил:
h1 в h2 и h1 в main, и мейне уже создавал-не работает
даже добавил h2 в h1-естественно, тоже самое
0
Renji
2102 / 1543 / 470
Регистрация: 05.06.2014
Сообщений: 4,473
28.06.2016, 23:33 #6
Хм, а если так? Специально проверил, у меня работает. Так что если у вас не работает, покажите какую ошибку выдает.
a.h
C++
1
2
3
4
5
6
7
8
9
#ifndef A_H
#define A_H
class A
{
public:
    class B;
};
 
#endif // A_H
b.h
C++
1
2
3
4
5
6
7
8
#ifndef B_H
#define B_H
#include"a.h"
class A::B
{
public:
};
#endif // B_H
main.cpp
C++
1
2
3
4
5
6
7
8
9
#include"b.h"
 
using namespace std;
 
int main()
{
    A::B test;
    return 0;
}
0
Хрисипп
19 / 29 / 13
Регистрация: 09.02.2016
Сообщений: 217
29.06.2016, 14:58  [ТС] #7
Цитата Сообщение от Renji Посмотреть сообщение
покажите
неполный тип ( aggregate 'F::B t ' has incomplete type and cannot be defined ).
и в списке членов ( при расширении видимости ) класс не показывается
0
Renji
2102 / 1543 / 470
Регистрация: 05.06.2014
Сообщений: 4,473
29.06.2016, 19:14 #8
Цитата Сообщение от Хрисипп Посмотреть сообщение
aggregate 'F::B t ' has incomplete type and cannot be defined
Теперь уже F, а не mainCl? Конкретно мой пример компилируется? Если нет, то тут уже х.з. в чем дело.
0
Unknownx
Заблокирован
29.06.2016, 21:00 #9
Цитата Сообщение от Хрисипп Посмотреть сообщение
class My;
- это неполное объявление класса(не более чем декларация) т.е в теле класса
class mainCl нет переменной class My(надеюсь ты понимаешь что в теле class mainCl не существует ничего не явного связанного с классом My кроме декларации данного класса(с таким же успехом ты мог задекларировать данный класс и перед объявлением mainCl, просто почему то решил себе добавить проблем). Что же касается неполного объявления в теле класса, то никаких проблем нет, все твои ошибки от кривых рук не более. Прикрепляю проект собранный в Dev-C++ (он соберётся в любой IDE с суппортом плюсов)
0
Миниатюры
Можно ли сделать класс вложенным, определив его в другом файле?  
Вложения
Тип файла: rar box_entry.rar (7.0 Кб, 1 просмотров)
Хрисипп
19 / 29 / 13
Регистрация: 09.02.2016
Сообщений: 217
30.06.2016, 20:25  [ТС] #10
Цитата Сообщение от Renji Посмотреть сообщение
х.з. в чем дело.
Цитата Сообщение от Unknownx Посмотреть сообщение
это неполное объявление класса
разобрался, создав главный хедер
C++
1
2
3
4
5
6
7
8
//  h.h
#include "h1.h"
#include "h2.h"
// main
#include "h.h"
main{
mainCl::My obj;
}
Есть, конечно, и другие решения, но они очень грязные
0
30.06.2016, 20:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2016, 20:25

нужно чтобы функция располагалась до ее вызова, после ее вызова и в другом файле. Как это сделать?
#include <iostream> #include <conio.h> using namespace std; int n, *c; ...

Поиск в текстовом файле всех слов, заданных в другом текстом файле
Вообщем такое задание: Поиск в текстовом файле всех слов, заданных в другом...

Сравнение слов в одном файле со словами в другом файле
Здравствуйте! Суть задачи такая: 1. Первый файл - запросы с городами, второй...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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