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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> подключение своего класса 
V
    Опции темы
Avaj
Дата 11.2.2009, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Например я написал некоторый класс (или шаблон):
Цитата

class my_class{
//
};


он находится в файле: 
Цитата

my_class.cpp


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

Как это реализуется?
PM MAIL   Вверх
GoldFinch
Дата 11.2.2009, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



перемести описание класса из  my_class.cpp в my_class.h
PM MAIL ICQ   Вверх
mes
Дата 11.2.2009, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 79
Всего: 250



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

// a.h

class A
{
 public:
    void f();
    int  f1();
};
// a.cpp

#include "a.h"

void A:f() { .. }
int  A:f1() { .. return .. }




--------------------
PM MAIL WWW   Вверх
Avaj
Дата 12.2.2009, 05:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Что-то я не совсем понял, вот так не компилится:

Код

//unit.h

class my_class{
    int a, b;
public:
    my_class(int,int);
    void print();
};

//unit.cpp

#include "unit.h"

my_class:my_class(int x = 0, int y = 0){
    a = x;
    b = y;
}

void my_class:print(){
    std::cout<<a<<' '<<b<<std::endl;
}

//f.cpp

#include "unit.h"

int main(){
    my_class x;
    x.print();
    return 0;
}

//ошибки

\CodeBlocks_projects\my_sample_project\unit.cpp|3|error: expected unqualified-id before ':' token|
\CodeBlocks_projects\my_sample_project\unit.cpp|8|error: invalid function declaration|
||=== Build finished: 2 errors, 0 warnings ===|



 smile 

Это сообщение отредактировал(а) Avaj - 12.2.2009, 05:55
PM MAIL   Вверх
t_gran
Дата 12.2.2009, 07:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 13.11.2007
Где: г.Усть-Илимск

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



Код

\CodeBlocks_projects\my_sample_project\unit.cpp|3|error: expected unqualified-id before ':' token|
\CodeBlocks_projects\my_sample_project\unit.cpp|8|error: invalid function declaration|

Двоеточие ставится!!!
Код

...
3|  my_class::my_class(int x = 0, int y = 0){
...
8|  void my_class::print(){




Это сообщение отредактировал(а) t_gran - 12.2.2009, 07:32


--------------------
Я знаю, что ничего не знаю© Сократ
user posted image
PM MAIL WWW   Вверх
math64
Дата 12.2.2009, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 12
Всего: 72



Пераметры по умолчанию объявляются только в заголовочном файле
PM   Вверх
Avaj
Дата 12.2.2009, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Ну с классом понятно, а как быть с шаблоном?

Так не компилится:

Код

//unit.h

template<class Type> class my_class{
    int a, b;
    Type p;
public:
    my_class(int x = 0, int y = 0);
    void print();
};

//unit.cpp

#include <iostream>
#include "unit.h"

template<class Type> my_class<Type>::my_class(int x, int y){
    a = x;
    b = y;
}

template<class Type> void my_class<Type>::print(){
    std::cout<<a<<' '<<b<<std::endl;
}

//main.cpp

#include "unit.h"

int main(){
    my_class<int> x;
    x.print();
    return 0;
}

//ошибки

In function `main':|main.cpp|4|undefined reference to `my_class<int>::my_class(int, int)'|
                               main.cpp|5|undefined reference to `my_class<int>::print()'|
||=== Build finished: 2 errors, 0 warnings ===|


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


Опытный
**


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

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



Экспорт шаблонов поддерживают только 1 или 2 компилятора. Один из которых интеловский.
Тут только выносить полностью в заголовочный файл и подключать. Других вариантов нет.


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


Бывалый
*


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

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



Всем спасибо.

Это сообщение отредактировал(а) Avaj - 13.2.2009, 05:23
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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