Ir ao conteúdo
  • Cadastre-se

C++, como interagir arquivo "main.cpp" com arquivo "cabeçalho.h" e "cabeçalho.cpp"


Posts recomendados

Olá, vou direto ao assunto porque vai ser um pouco grande e complicado de explicar.
Estou acompanhando um livro (C++ como programa 5º edição, Deitel) da minha faculdade. E fiz um programa que tem 3 arquivos.


GradeBook.h --> o cabeçalho do programa, aqui apenas vou DECLARAR as funções
GradeBook.cpp --> Aqui eu vou "importar" as funções declaradas em GradeBook.h e vou criar um corpo para elas.
main.cpp --> Nesse aqui eu devo "importar" GradeBook.h para acessar suas funções (lembrando que as funções de .h estar em outro arquivo "GradeBook.cpp")

Conclusão, o objetivo é criar um cabeçalho que eu possa usar suas funções em outro programa, PORÉM o cabeçalho NÃO pode ter o corpo das funções por questão de segurança de dados, se no meu programa eu incluir "GradeBook.cpp" que é o arquivo onde está o corpo das funções de GradeBook.h, não vai adiantar de nada esse esforço...

________________________________________
//Arquivo --> GradeBook.h = cabeçalho

#include <string>

using namespace std;

class GradeBook {

public:

GradeBook(string); //Isso é um construtor que server para iniciar courseName
void setCourseName(string);
string getCourseName();
void displayMessage();

private:
string courseName;
_________________________________________
//Arquivo --> GradeBook.cpp

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

using namespace std;

GradeBook::GradeBook(string name) {
setCourseName(name);
}

void GradeBook::setCourseName(string name) {

if (name.length() <= 25) { //se o tamanho da string name for <= 25
courseName = name;

if (name.length() > 25) { //se o tamanho da string name for > 25
courseName = name.substr(0, 25); //courseName recebe apenas os primeiros 25 caracteres, começando do 0
cout<<"Name \""<<name<<"\" exceeds maximum lenght (25).\n"
<<"Limiting courseName to first 25 characters.\n"<<endl;
}
}

string GradeBook::getCourseName() {
return courseName;
}

void GradeBook::displayMessage() {
cout<<"Welcome to the Grade Book for\n"<<getCourseName()<<"!"<<endl;
}
____________________________________________
//arquivo --> main.cpp

#include <iostream>

//A proxima linha é que esta o erro, não dar erro na verdade, mas era pra está incluindo
// o arquivo "GradeBook.h" igual o livro, mas o meu só funciona incluindo "GradeBook.cpp"
#include "GradeBook.cpp"

using namespace std;

int main() {

GradeBook gradeBook1("Nome do primeiro curso.");
GradeBook gradeBook2("Nome do segundo curso");

cout<<"gradeBook1 created for course: "<<gradeBook1.getCourseName()
<<"\ngradeBook2 created for course: "<<gradeBook2.getCourseName()
<<endl;

return 0;
}

Link para o comentário
Compartilhar em outros sites

Depende da forma que você está compilando.

 

Se estiver usando uma IDE, normalmente é criando um projeto e ir acrescentando os arquivos c/cpp...

 

Se for via linha de comando, geralmente basta informar os nomes dos arquivos

 

Estou usando Notepad++ . Eu ja tentei informar o nome de .h mas da erro. Por favor você pode apenas copiar esses arquivos e colar e compilar? Eu já estou na pagina 250 do livro e estou acompanhando sem problema, porém esse detalhe não me deixa em paz e não consigo estudar até resolver isso. No arquivo main deve está incluindo GradeBook.h e não .cpp  :(

Link para o comentário
Compartilhar em outros sites

Em main.cpp você está incluindo o cpp, altere para incluir o .h

 

Compilei seu programa no g++ com essa alteração e deu certo, da seguinte forma: g++ GradeBook.cpp main.cpp -o main

Esse que é o problema, quando eu altero para .h da erro na compilação, talvez o problema deve ser meu compilador. Vou tentar outro compilador. Mas o erro que da é esse:

_____________________________

C:\Users\Dhenyson\AppData\Local\Temp\ccV4QCLm.o main.cpp:(.text+0x48): undefined reference to `GradeBook::GradeBook(std::string)'

C:\Users\Dhenyson\AppData\Local\Temp\ccV4QCLm.o main.cpp:(.text+0x94): undefined reference to `GradeBook::GradeBook(std::string)'

C:\Users\Dhenyson\AppData\Local\Temp\ccV4QCLm.o main.cpp:(.text+0xbb): undefined reference to `GradeBook::getCourseName()'

C:\Users\Dhenyson\AppData\Local\Temp\ccV4QCLm.o main.cpp:(.text+0xce): undefined reference to `GradeBook::getCourseName()'

c:\program files (x86)\dev-cpp\mingw32\mingw32\bin\ld.exe C:\Users\Dhenyson\AppData\Local\Temp\ccV4QCLm.o: bad reloc address 0xf in section `.text$_ZN9GradeBookD1Ev[__ZN9GradeBookD1Ev]'

 

c:\program files (x86)\dev-cpp\mingw32\mingw32\bin\ld.exe final link failed: Invalid operation

C:\Users\Dhenyson\SkyDrive\programacao\cpp\OO\02\collect2.exe [Error] ld returned 1 exit status

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...