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

Поиск:

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


Опытный
**


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

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



Всем привет. А как правильно в заголовочном файле(File.h) обьявить класс или структуру, написаный в файле реализации(File.cpp)?
Спасибо.

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


Эксперт
***


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

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



В .h объяви, в .cpp определи. В чем трудность? Если трудность есть, то давай пример свой.


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


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Код

class X
{
public:
void metod();
};



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Sergio
Дата 24.4.2007, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

class PrivateForm {

 private:
    String Ip;
    String Nick;

 public:
    PrivateForm() {
     }

    PrivateForm(String _Ip, String _Nick) {
        Ip = _Ip;
        Nick = _Nick;

        TForm* Forma = new TForm(Application, 1);// äèíàìè÷åñêàÿ ôîðìà
        Forma->Width=320;
        Forma->Height=350;
        Forma->Left = Form1->Left + Form1->Width/2 - (Forma->Width/2);
        Forma->Top = Form1->Top + Form1->Height/2 - (Forma->Height/2);
        Forma->Caption = "Äèàëîã ñ " + Nick;
        Forma->Show();

        TMemo* ReceiveMemo = new TMemo(this);    // äèíàìè÷åñêàÿ memo
        ReceiveMemo->Parent = Forma;
        ReceiveMemo->Left = 1;
        ReceiveMemo->Top = 5;
        ReceiveMemo->Width = Forma->Width - 12;
        ReceiveMemo->Height = 200;
        ReceiveMemo->ScrollBars = ssVertical;
     }
 };

А вот как я его обьявил:
Код

class PrivateForm {
 private:
    String Ip;
    String Nick;
 public:
    PrivateForm();
    PrivateForm(String _Ip, String _Nick);
 };

Пишет ошибку:
[Linker Error] Unresolved external 'PrivateForm::PrivateForm(System::AnsiString, System::AnsiString)' referenced from E:\PROGRAMMING\Serguk\UNIT1.OBJ

Это сообщение отредактировал(а) Sergio - 24.4.2007, 19:28
PM MAIL ICQ   Вверх
vinter
Дата 24.4.2007, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


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

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



Код

PrivateForm::PrivateForm() {
     }

    PrivateForm::PrivateForm(String _Ip, String _Nick) 
{
        Ip = _Ip;
        Nick = _Nick;

        TForm* Forma = new TForm(Application, 1);// äèíàìè÷åñêàÿ ôîðìà
        Forma->Width=320;
        Forma->Height=350;
        Forma->Left = Form1->Left + Form1->Width/2 - (Forma->Width/2);
        Forma->Top = Form1->Top + Form1->Height/2 - (Forma->Height/2);
        Forma->Caption = "Äèàëîã ñ " + Nick;
        Forma->Show();

        TMemo* ReceiveMemo = new TMemo(this);    // äèíàìè÷åñêàÿ memo
        ReceiveMemo->Parent = Forma;
        ReceiveMemo->Left = 1;
        ReceiveMemo->Top = 5;
        ReceiveMemo->Width = Forma->Width - 12;
        ReceiveMemo->Height = 200;
        ReceiveMemo->ScrollBars = ssVertical;
     }



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


Опытный
**


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

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



vinter, всё равно это "уточнение" метода не помогает smile 
PM MAIL ICQ   Вверх
Hurricane
Дата 24.4.2007, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

Репутация: 6
Всего: 9



Вот так - будет понятно?

В .h файл помещаешь это:
Код

class PrivateForm {

 private:
    String Ip;
    String Nick;

 public:
    PrivateForm();
    PrivateForm(String _Ip, String _Nick);
 };


А это - в .cpp файл:
Код

PrivateForm::PrivateForm()
{
}

PrivateForm::PrivateForm(String _Ip, String _Nick)
{
        Ip = _Ip;
        Nick = _Nick;

        TForm* Forma = new TForm(Application, 1);// äèíàìè÷åñêàÿ ôîðìà
        Forma->Width=320;
        Forma->Height=350;
        Forma->Left = Form1->Left + Form1->Width/2 - (Forma->Width/2);
        Forma->Top = Form1->Top + Form1->Height/2 - (Forma->Height/2);
        Forma->Caption = "Äèàëîã ñ " + Nick;
        Forma->Show();

        TMemo* ReceiveMemo = new TMemo(this);    // äèíàìè÷åñêàÿ memo
        ReceiveMemo->Parent = Forma;
        ReceiveMemo->Left = 1;
        ReceiveMemo->Top = 5;
        ReceiveMemo->Width = Forma->Width - 12;
        ReceiveMemo->Height = 200;
        ReceiveMemo->ScrollBars = ssVertical;
}


А у тебя получается, что класс PrivateForm объявлен дважды, причем реализация (implementation) есть только для того, что в .cpp файле. Я бы на месте линкера тоже ругнулся  smile .

PM MAIL   Вверх
JackYF
Дата 24.4.2007, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


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

Репутация: 18
Всего: 162



Цитата(Sergio @  24.4.2007,  19:24 Найти цитируемый пост)
[Linker Error] Unresolved external 'PrivateForm::PrivateForm(System::AnsiString, System::AnsiString)' referenced from E:\PROGRAMMING\Serguk\UNIT1.OBJ


Это ошибка линкера, а не компилятора. Из чего делаем вывод, что к проекту надо просто подключить .cpp-файл.

Добавлено через 1 минуту и 35 секунд
Цитата(Hurricane @  24.4.2007,  19:54 Найти цитируемый пост)
А у тебя получается, что класс PrivateForm объявлен дважды, причем реализация (implementation) есть только для того, что в .cpp файле. Я бы на месте линкера тоже ругнулся  smile .


Да, ну и конечно, Sergio, это тоже сделай. И все у тебя заработает.

Добавлено через 2 минуты и 26 секунд
Тьфу блин, не та цитата... короче, сделай так, как посоветовал Hurricane, и будет тебе локальное счастье.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
try_to_get
  Дата 24.4.2007, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

//HFile.h
class a{
  int b;
public:
  void method();
};
//HFile2.h
#include "HFile.h"
void a::method(){
   b*=b;
}
//CppFile.cpp
#include "HFile2.h"
int main(){
   a MyClass;
   a.method();
   return 0;
}



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


Эксперт
***


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

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



try_to_get, в заголовочном файле определение метода? Нехорошо.


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


Шустрый
*


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

Репутация: 6
Всего: 9



Цитата(try_to_get @ 24.4.2007,  14:01)
Код

//CppFile.cpp
#include "HFile2.h"
int main(){
   a MyClass;
   a.method();
   return 0;
}


 smile Нда. А это - так вообще интересная мысль...  smile 


PM MAIL   Вверх
Ln78
Дата 25.4.2007, 06:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Код

//CppFile.cpp
#include "HFile2.h"
int main(){
   a MyClass;
   a.method();
   return 0;
}



Наверное, имелось в виду
Код

MyClass.method();

А вообще, использование заглавных букв да и самих имён для имён классов и объектов этих классов здесь вряд ли наилучшее
PM MAIL   Вверх
Xenon
Дата 25.4.2007, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Да там вообще не код, а жесть smile
Код

//HFile.h
class a
{
    int b;
public:
    void method();
};
//HFile.cpp
#include "HFile.h"
void a::method()
{
   b *= b;
}
//main.cpp
#include "HFile.h"
int main()
{
   a MyClass;
   MyClass.method();
   return 0;
}


Это сообщение отредактировал(а) Xenon - 25.4.2007, 13:07


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


Опытный
**


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

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



Код

a MyClass;
a.method();

Ой! Торопился и спутал с Паскалем.

Код

a MyClass;
MyClass.method();

да это правильно.

Добавлено через 1 минуту и 56 секунд
Код

в заголовочном файле определение метода? Нехорошо. 

Почему?

Добавлено через 4 минуты и 9 секунд
Чем отличается .h от .cpp?


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


Explorer
****


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

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



тем что по принятым канонам в h файле находится интерфейс, а в cpp его реализация


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


iOS Lead Developer
****


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

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



Нет, написал так, как нужно по учебнику. Я вообще класс и реализацию всегда в *.H пишу, не люблю громоздить кучи файлов.

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


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

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


Explorer
****


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

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



Цитата(mr.Anderson @  26.4.2007,  20:46 Найти цитируемый пост)
vinter, я, конечно, извиняюсь, но что за бред? Чего ради вы в *.CPP снова, можно сказать, переобъявили класс?!

издержки copy\past, в сpp конешно же реализация

Добавлено через 4 минуты и 15 секунд
Цитата(mr.Anderson @  26.4.2007,  20:59 Найти цитируемый пост)
Нет, написал так, как нужно по учебнику.

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

Цитата(mr.Anderson @  26.4.2007,  20:59 Найти цитируемый пост)
Я вообще класс и реализацию всегда в *.H пишу, не люблю громоздить кучи файлов.

зря, надо разграничивать interface\implementation


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


iOS Lead Developer
****


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

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



Цитата
зря, надо разграничивать interface\implementation

А чего ради? Чтобы скрывать от других людей? Я пока еще не понял, как это можно сделать. Все равно нельзя распространять H отдельно от CPP, работать не будет. Поэтому смысл разделения? А вот увеличивать количество файлов класса вдвое не хочется.


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

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


Explorer
****


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

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



нет просто чтобы человек взявший твой код, не стал бы перелопачивать кучу кода, а посмотрел бы себе отдельно интерфейс, ему не нужна реализация он просто хочет знать какие возможности ему предоставляет этот класс. ну и принято так, интерфейс user-part, а вот в реализацию лезть не положено smile
вот например множество библиотечных ф-ий, их реализация ведь скрыта от тебя.



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


Эксперт
***


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

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



mr.Anderson, как минимум для того, чтобы у тебя не были файлы на три страницы. Ты можешь распространять, допустим, хедеры для пользователей и для разработчиков абсолютно разные (код не скроется, но ты можешь у хедеров для пользователей выкинуть некоторые функции, которые им не нужны)
Потом, компилятору порой сложно избежать репликации агрегатов из несклольких единиц трансляции. 
Daevaorn  но тот вариант, что vinter кинул (хоть и сдуру) - чисто нарушение ODR. В каком случае это будет работать?

Добавлено через 2 минуты и 42 секунды
... немного подумав ... :  когда, вероятно, абсолютно индентичны определения, когда определения в разных единицах трансляции?


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


Эксперт
****


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

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



Цитата(Xenon @  26.4.2007,  22:37 Найти цитируемый пост)
чисто нарушение ODR. В каком случае это будет работать?

Цитата(Xenon @  26.4.2007,  22:37 Найти цитируемый пост)
... немного подумав ... :  когда, вероятно, абсолютно индентичны определения, когда определения в разных единицах трансляции?

угу. там нет инклюда
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.1394 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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