Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как в заголовочном файле(File.h) обьявить класс, написаный в файле реализации(File.cpp)? 
:(
    Опции темы
Xenon
Дата 25.4.2007, 20:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



try_to_get, Страуструп страница 246 "Исходные файлы и программы". Жестко запрещается определение простых функций (кроме встроенных) в заголовочных файлов, а вот определение методов просто нежелательно.


--------------------
user posted image  
PM MAIL   Вверх
try_to_get
Дата 25.4.2007, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 426
Регистрация: 19.3.2007
Где: Россия

Репутация: нет
Всего: 2



Цитата(vinter @ 25.4.2007,  20:28)
тем что по принятым канонам в h файле находится интерфейс, а в cpp его реализация

Все понял, теперь буду методы писать в .срр
Спасибо за ответ!


--------------------
Алгоритм не роскошь, а средство достижения цели!
user posted image
PM MAIL   Вверх
Sergio
  Дата 26.4.2007, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

Репутация: 0
Всего: 1



Всё равно не работает smile  smile  smile  Вот пример попроще:

Unit2.cpp
Код

#pragma hdrstop
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)

class Sergio {

  public:
     Sergio() {
     }
 };

Unit2.h:
Код

#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
class Sergio {
 public:
    Sergio();
 };
#endif

Ошибки:
Цитата

[C++ Error] Unit2.cpp(12): E2238 Multiple declaration for 'Sergio'
[C++ Error] Unit2.h(7): E2344 Earlier declaration of 'Sergio'

Не пойму почему smile 
PM MAIL ICQ   Вверх
Xenon
Дата 26.4.2007, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



Unit2.h:
Код

#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
Sergio::Sergio() {}
#endif



--------------------
user posted image  
PM MAIL   Вверх
Daevaorn
Дата 26.4.2007, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(Sergio @  26.4.2007,  19:10 Найти цитируемый пост)
Не пойму почему

Читай, что написал компилятор. Он же не зря тебе причину ошибки сообщает. Второй раз объявлять класс не нужно. А вообще читай книги по С++ или google, а то вопросы совсем детские задаешь, которые на первых страницах книг раскраваются.
PM MAIL WWW   Вверх
mr.Anderson
Дата 26.4.2007, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



Sergio, вы дважды объявляете класс, чего делать не требуется. Класс объявляется в *.H, а реализация - в *.CPP.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Daevaorn
Дата 26.4.2007, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(Xenon @  26.4.2007,  19:26 Найти цитируемый пост)
Unit2.h:код C++1:2:3:4:5:#ifndef Unit2H#define Unit2H//---------------------------------------------------------------------------Sergio::Sergio() {}#endif

?smile
PM MAIL WWW   Вверх
Sergio
Дата 26.4.2007, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

Репутация: 0
Всего: 1



Daevaorn, а я неопределяю 2 разы. Я только вказую конструктор по умолчанию.

mr.Anderson, покажи как правильно?
PM MAIL ICQ   Вверх
mr.Anderson
Дата 26.4.2007, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



В *.H - файле пишем:
Код

class Sergio {
 Sergio( void );
};

В *.CPP - файле:
Код

#ifndef SERGIO_H
#define SERGIO_H

Sergio::Sergio( void )
{
 //реализация
}

#endif


Это сообщение отредактировал(а) mr.Anderson - 26.4.2007, 18:55


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Xenon
Дата 26.4.2007, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



Daevaorn, ... бывает smile


--------------------
user posted image  
PM MAIL   Вверх
vinter
Дата 26.4.2007, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56




mr.Anderson,
h
Код

#ifndef SERGIO_H
#define SERGIO_H


class Sergio {
 Sergio( void );
};
#endif

cpp
Код

class Sergio {
 Sergio( void );
};



--------------------
Мой блог
PM MAIL WWW   Вверх
mr.Anderson
Дата 26.4.2007, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



vinter, я, конечно, извиняюсь, но что за бред? Чего ради вы в *.CPP снова, можно сказать, переобъявили класс?! Делать именно так надо, как я написал. И это не с моих слов, в конце концов, так и в учебниках написано. Только что проверил.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Daevaorn
Дата 26.4.2007, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(mr.Anderson @  26.4.2007,  21:46 Найти цитируемый пост)
я, конечно, извиняюсь, но что за бред?

у тебя?smile
Цитата(mr.Anderson @  26.4.2007,  19:55 Найти цитируемый пост)
В *.CPP - файле:
Код

#ifndef SERGIO_H
#define SERGIO_H

Sergio::Sergio( void )
{
 //реализация
}

#endif


класс, да?
А вот код vinter'а хоть и необычен, но вполне имеет право на жизнь, но только в очень редких случаях
PM MAIL WWW   Вверх
mr.Anderson
Дата 26.4.2007, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



Daevaorn, почему? В H - объявление, в CPP - реализация. Я не то же самое в своем коде написал?


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Daevaorn
Дата 26.4.2007, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(mr.Anderson @  26.4.2007,  21:52 Найти цитируемый пост)
почему? В H - объявление, в CPP - реализация. Я не то же самое в своем коде написал?

а ты всегда "стражей включения" в cpp файлах пишешь?
PM MAIL WWW   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1056 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.