Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Irka-Kefirka
0 / 0 / 0
Регистрация: 05.08.2012
Сообщений: 4
#1

Опять про реализацию класса в отдельном файле - C++

05.08.2012, 16:07. Просмотров 1130. Ответов 6
Метки нет (Все метки)

Допустимо ли следующее?

есть проект в Visual Studio 2010.
в нем следующие файлы:

main.cpp - собссно программа
MyClass.h - интерфейс класса MyClass
MyClass.cpp - реализация класса MyClass
MySubClass.h - интерфейс класса MySubClass (производного от MyClass)
MySubClass.cpp - реализация класса MySubClass

Содержимое файлов:
main.cpp

--------------------------
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include "MyClass.h"
#include "MySubClass.h"
...
blablabla
...
int main()
{
...
blablabla
...
}
---------------------------

MyClass.h

--------------------------
C++
1
2
3
4
5
6
7
8
9
10
11
12
#ifndef MYCLASS_H
#define MYCLASS_H
 
class MyClass
{
public:
...
protected
...
};
 
#endif
---------------------------

MyClass.cpp

---------------------------
C++
1
2
3
4
5
6
7
8
9
#ifndef MYCLASS_CPP
#define MYCLASS_CPP
 
#include "MyClass.h"
....
blablabla
...
 
#endif
--------------------------

MySubClass.h

--------------------------
C++
1
2
3
4
5
6
7
8
9
10
11
12
#ifndef MYSUBCLASS_H
#define MYSUBCLASS_H
 
class MySubClass: public MyClass
{
public:
...
private
...
};
 
#endif
---------------------------

MySubClass.cpp

---------------------------
C++
1
2
3
4
5
6
7
8
9
#ifndef MYSUBCLASS_CPP
#define MYSUBCLASS_CPP
 
#include "MySubClass.h"
....
blablabla
...
 
#endif
--------------------------


В данном случае, ничего не работает. При компиляции сообщает, что не определен базовый класс MyClass.
Хотя, если поместить реализацию MySubClass в файл MySubClass.h (реализацию тока MySubClass, реализацию
MyClass же оставить в файле MyClass.cpp без всяких изменений), то все работает. Почему реализация
MyClass в отдельном файле работает нормально, а MySubClass нет?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.08.2012, 16:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Опять про реализацию класса в отдельном файле (C++):

Реализация класса в отдельном файле - C++
Изучаю C++ (вернее только начал) по учебнику &quot;Харви М. Дейтел, Пол Дж. Дейтел - Как программировать на C++&quot; и застрял на создании классов в...

Реализовать определение нового класса в отдельном файле (библиотека пользователя) - C++
1. Реализовать определение нового класса в отдельном файле (библиотека пользователя). 2. Обязательно должны быть реализованы следующие...

Описание функции шаблонного класса библиотеки в отдельном cpp-файле - C++
Есть библиотека. В файле ARRAYLIST.HPP описан шаблон template &lt;typename _Type&gt; class ArrayList { private: int length; ...

Вопрос про rand() и его реализацию. - C++
Приветствую всех. Такая проблема: есть несколько звуковых файлов (они загружены в буфер), при нажатии на клавишу (в моем случаем &quot;Q&quot;)...

Опять про cin.getline и невызов - C++
я знаю, что вопрос много раз поднимался, но везде ссылки или описания типа делай так и все - это я читал... Вот фрагмент кода: ...

Опять про fflush, уже stdout - C++
Уважаемые профессионалы. В книге Хэзфилд, Кирби &quot; Искусство программирования на языке Си. Фундаментальные алгоритмы.... &quot; на 58 стр. увидел...

6
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.08.2012, 16:14 #2
Если вы, в реализаци одного класса (или в заголовочном файле этого класаа), используете другой класс, то в этом файле нужно подключить заголовочный файл используемого класса. В MySubClass.h нужно сделать #include "MyClass.h". И, если вы не включаете .cpp файлы в другие, зачем вам в них такие конструкции:
C++
1
2
3
4
#ifndef MYCLASS_CPP
#define MYCLASS_CPP
..............................
#endif
0
Irka-Kefirka
0 / 0 / 0
Регистрация: 05.08.2012
Сообщений: 4
05.08.2012, 16:25  [ТС] #3
в файле MySubClass.h нет строки #include "MyClass.h", если Вы об этом.
но проблема в том, что все работает если реализацию класса MySubClass оставить в файле MySubClass.h
почему так?
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
05.08.2012, 16:30 #4
Irka-Kefirka, выложите архив с проектом, код работать не должен потому что

Цитата Сообщение от Irka-Kefirka Посмотреть сообщение
в файле MySubClass.h нет строки #include "MyClass.h"
0
Irka-Kefirka
0 / 0 / 0
Регистрация: 05.08.2012
Сообщений: 4
05.08.2012, 16:32  [ТС] #5
ааааа....все понятно...вопрос закрыт
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.08.2012, 16:33 #6
Цитата Сообщение от Irka-Kefirka Посмотреть сообщение
реализацию класса MySubClass оставить в файле MySubClass.h
Не видно кода, что тут скажешь?
0
Irka-Kefirka
0 / 0 / 0
Регистрация: 05.08.2012
Сообщений: 4
05.08.2012, 16:34  [ТС] #7
Цитата Сообщение от Jupiter Посмотреть сообщение
Irka-Kefirka, выложите архив с проектом, код работать не должен потому что
вот в том то и непонятно было, что он работал, даже с отсутствием этой строки, но только если реализацию MySubClass оставить в файле MySubClass.h
0
05.08.2012, 16:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.08.2012, 16:34
Привет! Вот еще темы с ответами:

Вынести реализацию конструктора производного класса - C++
Хочу сделать родитель очередь. и класс задачи, который является производным. Прототип класса в хедере, который заинклюден в файл...

Где размещать реализацию методов класса? - C++
привет. читаю книжку по С++. автор Либерти. в ней куча опечаток повсюду. наткнулся на очередную непонятку. то ли я не врубаюсь, то ли у них...

Разделение класса на интерфейс и реализацию (ошибка __thiscall) - C++
Всем хай! Есть такой наипростейший класс (для примера): #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; class...

Функция в отдельном файле - C++
Всем привет! Учусь писать код в разных файлах, возникла проблема с подобным кодом: main.cpp #include &lt;iostream&gt; #include...


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

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

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