Модераторы: 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   Вверх
Страницы: (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.1365 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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