Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > подключение своего класса


Автор: Avaj 11.2.2009, 16:44
Например я написал некоторый класс (или шаблон):
Цитата

class my_class{
//
};


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

my_class.cpp


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

Как это реализуется?

Автор: GoldFinch 11.2.2009, 16:49
перемести описание класса из  my_class.cpp в my_class.h

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

// a.h

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

#include "a.h"

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


Автор: Avaj 12.2.2009, 05:39
Что-то я не совсем понял, вот так не компилится:

Код

//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 

Автор: t_gran 12.2.2009, 07:32
Код

\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(){



Автор: math64 12.2.2009, 08:59
Пераметры по умолчанию объявляются только в заголовочном файле

Автор: Avaj 12.2.2009, 11:04
Ну с классом понятно, а как быть с шаблоном?

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

Код

//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 ===|


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

Автор: Avaj 12.2.2009, 12:01
Всем спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)