1
resposta

undefined reference to `Ponto2D::Ponto2D(double, double)'

Compilando o código abaixo utilizado em uma main que eu não consigo modificar dá o seguinte erro: undefined reference to Ponto2D::Ponto2D(double, double)

se eu modifico o construtor Ponto2D no arquivo cpp para: Ponto2D::Ponto2D(double, double) da o seguinte erro: error: extra qualification ‘Ponto2D::’ on member ‘Ponto2D’ [-fpermissive] Ponto2D::Ponto2D (double X, double Y)

como posso eliminar esse erro? não estou sabendo declarar da maneira correta o struct

Arquivo .hpp:

#include <iostream>
#include <iomanip>
#include <cmath>
#include <math.h>
#ifndef PONTO2D
#define PONTO2D

using namespace std;

struct Ponto2D{
    double x;
    double y;

    Ponto2D(double , double );
    Ponto2D();

    double calcular_distancia();

};
#endif // PONTO2D

Arquivo .cpp:

#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

struct Ponto2D
{
    double x;
    double y;


    Ponto2D (double X, double Y)
    {
        x=X;
        y=Y;
    }
    Ponto2D()
    {

    }

    double calcular_distancia(Ponto2D* ponto)
    {
        double dx = ponto->x - this->x;
        double dy = ponto->y - this->y;
        return sqrt(pow((dx-x),2) + pow((dy-y),2));
    }
};
1 resposta

Olá,

Vc declarou o metodo no seu Arquivo .HPP

double calcular_distancia();

Mas no seu arquivo** .CPP** vc fez:

double calcular_distancia(Ponto2D* ponto)

Esse é o o problema que ele esta te informando, mas vc ainda tem que colocar as diretivas #ifndef no início do código e não depois dos includes

#ifndef PONTO2D
#define PONTO2D

.... <Seu código aqui> ...

#endif // PONTO2D

Outra coisa, já que criou um arquivo .HPP inclui ele no seu .CPP ele está faltando.

#include <iostream> // Vc pode tirar esse
#include <iomanip>// Vc pode tirar esse
#include <cmath>// Vc pode tirar esse

#include "Arquivo.hpp" // Depois que colocar esse, porque eles já estão la no Arquivo.HPP

Esse é mais uma questão de boa prática, não coloca diretiva using namespace fora do main, não é um erro, mas normalmente fora do main, não usamos diretiva using namespace