Criando um arquivo .h de uma classe

1. Criando um arquivo .h de uma classe

Rildo dos Santos Gonçalves
rildo.goncalves

(usa Ubuntu)

Enviado em 03/05/2008 - 22:17h

Blz galera...
Queria saber como faço para criar um arquivo .h de uma classe. Quando é só de uma função até que rola... mas minha declaração no arquivo header da classe não ta certa. Uso DevCpp 4.9 para windows.
Aqui vai meu programinha...

**************************************************
//classRectangle.cpp

class Rectangle{
private:
USHORT itsWidth;
USHORT itsHeight;
public:
Rectangle(USHORT width, USHORT height){
itsWidth = width;
itsHeight = height;
}
~Rectangle(){}

void Drawshape() const{
Drawshape(itsWidth, itsHeight);
}
void Drawshape(USHORT aWidth, USHORT aHeight) const{
for (USHORT i = 0; i<aHeight; i++){
for (USHORT j = 0; j<aWidth; j++){
cout<<"*";
}
cout<<"\n";
}
}
};

**************************************************
//classRectangle.h

class Rectangle;

**************************************************
//main.cpp

#include <cstdlib>
#include <iostream>
#include "classRectangle.h"

typedef unsigned short int USHORT;

using namespace std;


int main(int argc, char *argv[])
{
//inicializar um retangulo com (30,5)
Rectangle rec1(30,5);
cout<<"Drawshape(): \n";
rec1.Drawshape();
cout<<"Drawshape(40,2): \n";
rec1.Drawshape(40, 2);

system("PAUSE");
return EXIT_SUCCESS;
}
**************************************************


Ah... Se eu coloco tudo só em um arquivo(main.cpp) ele roda beleza. Acho que só não to sabendo como criar o arquivo.h. E esse arquivo classRectangle.h... só coloquei ai por colocar, pois não tenho a minima idéia de como fazer...rs.

Agradeço se alguem puder me ajudar... Flw.


  


2. Faltou dizer o erro!

Marcelo Utikawa da Fonseca
utikawa

(usa Ubuntu)

Enviado em 03/05/2008 - 23:08h

Alguns comentários:

1) Qual o erro que ocorre? Você esqueceu de dizer!!! :-)

2) O typedef de USHORT só existe em main. Um erro que ia acontecer é ao compilar o classRectangle.cpp pois o USHORT não estaria definido! O ideal é que exista um outro .h apenas com definições que seria incluído tanto em classRectangle.cpp como em main.cpp

3) Quando existe mais de um arquivo sendo compilado é necessário primeiro gerar o arquivo objeto de cada um dos .cpp e depois o .exe a partir de todos os .o gerados. Como você está fazendo isso? Foi criado um projeto no Devcpp que está fazendo isso para você?

Acho que é só por enquanto. Explique eatamente o erro que está dando para saber o que está dando errado. :-)


3. Re: Criando um arquivo .h de uma classe

Rildo dos Santos Gonçalves
rildo.goncalves

(usa Ubuntu)

Enviado em 04/05/2008 - 00:08h

É verdade... bom, o erro é o seguinte:
*************************************************
13 D:\devcpp\teste\main.cpp variable `Rectangle rec1' has initializer but incomplete type
*************************************************
a linha 13 é a seguinte em main.cpp:
Rectangle rec1(30,5);

alem desse erro tem esses dois:
**************************************************
D:\devcpp\teste\main.cpp In function `int main(int, char**)':
**************************************************
D:\devcpp\teste\Makefile.win [Build Error] [main.o] Error 1
**************************************************

Vlw...


4. Ainda faltou a descrição do erro

Marcelo Utikawa da Fonseca
utikawa

(usa Ubuntu)

Enviado em 04/05/2008 - 15:49h

Não sei se o próprio viva o linux retirou um pedaço por algum motivo mas está faltando uma parte do erro. Parece que haviam mais linhas de erro mas não aparecem.
Quanto a inicializador incompleto pode ser que seja por o tipo Rectangle não ter sido declarada por algum motivo. Tente declarar da seguinte forma:

class Rectangle rec1;

Assim você torna explícito que está declarando um objeto de uma classe e talvez este aviso não seja mais gerado.


5. Re: Criando um arquivo .h de uma classe

Andi
upc0d3

(usa Gentoo)

Enviado em 05/05/2008 - 10:33h

seguinte cara, os arquivos ' .h ' saum destinados as bibliotecas(headers) tu deve colocar neles somente a declaracao das bibliotecas.

cria um arquivo qualquer com a extensaum .cpp.
exemplo:

minha_classe.cpp

e ai no arquivo minha_classe.cpp tu coloca a classe que tu tava fazendo.

e no arquivo onde tah a main.. tu coloca:

#include "minha_classe.cpp"

e ai usa ela normal.

ateh++
abraco!!!


6. Quase resolvido...

Rildo dos Santos Gonçalves
rildo.goncalves

(usa Ubuntu)

Enviado em 06/05/2008 - 12:38h

Vlw pela ajuda pessoal. Bom, depois de reler um livro eu acho que arrumei algumas coisas... Consegui separar as coisas e fazer o programa rodar. Da uma olhada:

//main.cpp
#include <cstdlib>
#include "classRectangle.h"

using namespace std;

int main(int argc, char *argv[])
{
Rectangle rec(10,5);
cout<<"drawshape()<<\n";
rec.Drawshape();
cout<<"drawshape(40,2): \n";
rec.Drawshape(5,2);
system("PAUSE");
return EXIT_SUCCESS;
}
*************************************************
//classRectangle.cpp
#include "classRectangle.h"

//implementação do construtor
Rectangle::Rectangle(USHORT width, USHORT height){
itsWidth = width;
itsHeight = height;
cout<<"Construtor...\n";
}

void Rectangle::Drawshape() const{
Drawshape(itsWidth, itsHeight);
}

//drawshape sobrecarregada
void Rectangle::Drawshape(USHORT width, USHORT height) const{
for(USHORT i = 0; i<height; i++){
for(USHORT j=0; j<width; j++) cout<<"*";
cout<<"\n";
}
}
**************************************************
//classRectangle.h
#include<iostream.h>

typedef unsigned short int USHORT;

class Rectangle{
public:
Rectangle(USHORT width, USHORT height);
~Rectangle(){};

//Drawshape - Função de classe sobrecarregada
void Drawshape() const;
void Drawshape(USHORT aWidth, USHORT aHeight)const;

private:
USHORT itsWidth;
USHORT itsHeight;
};
**************************************************

Nessa ultima que tava o erro fatal... Eu não tava declarando a classe corretamente. O que deve ir para o classRectangle.cpp é apenas a definição dos métodos da classe e naum a classe inteira. Em classRectangle.h deve ficar a defição da classe com todas as variáveis e tudo mais...
Quanto a deixar os typedef num arquivo em separado... acho que vou começar a usar. Parece um bom jeito de organizar o projeto.

Só tenho mais uma dúvida... O Devcpp me mostra um erro de compilação (ou de linkagem naum sei...) é esse ai.
*************************************************
#warning This file includes at least one deprecated or antiquated header. \
Please consider using one of the 32 headers found in section 17.4.1.2 of the \
C++ standard. Examples include substituting the <X> header for the <X.h> \
header for C++ includes, or <iostream> instead of the deprecated header \
<iostream.h>. To disable this warning use -Wno-deprecated.

1 C:\Dev-Cpp\listagem 13.1\classRectangle.h:1, from classRectangle.cpp from classRectangle.h:1, from classRectangle.cpp
**************************************************
Só que quando eu compilo de novo o erro cai fora. Sei la porque... Se alguem souber agradeço.
T+


7. Re: Criando um arquivo .h de uma classe

Andi
upc0d3

(usa Gentoo)

Enviado em 06/05/2008 - 16:48h

cara:

.h são bibliotecas, nelas tu coloca apenas as DECLARACOES das classes.

.cpp é um arquivo C++, nele tu coloca as DEFINICOES das classes.

ateh+


8. Resolvido

Rildo dos Santos Gonçalves
rildo.goncalves

(usa Ubuntu)

Enviado em 11/05/2008 - 09:00h

Blz gente..






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts