Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: ber0x88 en 16 Abril 2016, 19:31 PM

Título: Classes em Ficheiros
Publicado por: ber0x88 en 16 Abril 2016, 19:31 PM
Boa tarde,
Peço desculpa falar em português mas espero que percebam.  :-X
Segue o seguinte código:

test.cpp
Código (cpp) [Seleccionar]
#include "MyClass.h"
#include "MyClass.cpp"
#include <iostream>

int main(){
    MyClass a;
}


Cria o objecto "a" referente há classe MyClass.
Output:
Constr
Dest

MyClass.h onde está declarado a função do construtor e destrutor
Código (cpp) [Seleccionar]
#ifndef MYCLASS_H
#define MYCLASS_H


class MyClass
{
    public:
        MyClass();
        ~MyClass();
    protected:
    private:
};

#endif // MYCLASS_H



MyClass.cpp função do construtor e destrutor
Código (cpp) [Seleccionar]
#include "MyClass.h"
#include <iostream>
using namespace std;


MyClass::MyClass()
{
    cout << "constr" << endl;
}

MyClass::~MyClass()
{
    cout << "Dest" << endl;
}



Tenho declarado MyClass.cpp em test.cpp e só assim é que funciona. Caso comente a linha que faz " #include "MyClass.cpp" "  e fique apenas incluído o MyClass.h ocorre o seguinte erro:

/home/user/Documents/workspace/test.o||In function `main':|
test.cpp|| undefined reference to `MyClass::MyClass()'|
test.cpp|| undefined reference to `MyClass::~MyClass()'|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

Caso inclua só o MyClass.cpp o programa também executa sem erros.
Não deberia executar normalmente só incluindo o Header?

Desde já obrigado :P
Título: Re: Classes em Ficheiros
Publicado por: ivancea96 en 16 Abril 2016, 20:21 PM
Código (cpp) [Seleccionar]
#include "MyClass.h"
#include "MyClass.cpp"


Solo haz include del .h.

Los .cpp se compilan a parte.

¿Tienes un proyecto o compilas cada archivo por separado?

La compilación en este caso, va así:
test.cpp -> test.o
MyClass.cpp -> MyClass.o
test.o + MyClass.o -> test.exe


"Undefined reference" significa que no encuentra la clase en los ".o". Lo más probable es que estés haciendo:
test.o -> test.exe :: Error: falta MyClass

No sé como compilas, ni que IDE o editor usas, así que no puedo decir más.
Título: Re: Classes em Ficheiros
Publicado por: ber0x88 en 17 Abril 2016, 00:37 AM
Uso Codeblocks em linux com g++ 4.8.4.
Tentei novamente com novo projeto e continua o mesmo erro.  :-\
Título: Re: Classes em Ficheiros
Publicado por: ivancea96 en 17 Abril 2016, 01:01 AM
Están los 3 archivos metidos en el proyecto? Debería compilar bien
Título: Re: Classes em Ficheiros
Publicado por: ber0x88 en 17 Abril 2016, 01:08 AM
Já está a funcionar.  :P Apenas fechei o IDE e o projeto, voltei a abrir projeto recente e funcionou  :xD
Título: Re: Classes em Ficheiros
Publicado por: ivancea96 en 17 Abril 2016, 01:12 AM
Puedes darle a compilar, y mostrar lo que salga en la pestaña "Build log"?
Título: Re: Classes em Ficheiros
Publicado por: ber0x88 en 17 Abril 2016, 01:31 AM
Fiz: File > new project > console application.
Depois já com o projeto aberto:
File > new > Class.

The new class has been created.
Do you want to add it to the current project?  > Yes

continuava a dar o erro:
/home/joao/Documents/workspace/testing/main.cpp|7|undefined reference to `MyClass::MyClass()'|

fechei o Codeblocks. Abri novamente em recent projects,  F9 (Run) e funcionou sem erros...
Será problema do IDE?
Título: Re: Classes em Ficheiros
Publicado por: ivancea96 en 17 Abril 2016, 01:42 AM
Tal vez no se hubiera guardado el proyecto, es lo que se me ocurre. Si te vuelve a pasar, dale click derecho sobre el proyecto y "Guardar proyecto", para ver si es eso.
Título: Re: Classes em Ficheiros
Publicado por: ber0x88 en 17 Abril 2016, 01:57 AM
Criei o projeto de novo.
Save all files, project, workspace, everything -> undefined reference to `MyClass::MyClass()'|

Fecho e volto a abrir em recent projects e funciona...  :laugh: