C ++: переопределение «имени класса» - PullRequest
0 голосов
/ 01 мая 2020

Я пишу код, описывающий сложную переменную и действительную переменную.

Я включил заголовочный файл, который, кажется, создает конфликт между файлом .hpp и файлом. cpp.

Они похожи, и я не могу отследить, откуда происходит переопределение.

solver.hpp


#include <iostream>
#include <complex>

class RealVariable
    {
        public:
        std::complex<double>c;
        RealVariable(double d);
        RealVariable();
   };

    class ComplexVariable
    {
        public:
        std::complex <double>d;
        ComplexVariable(double d1,double d2);
        ComplexVariable();

    };

решатель . cpp

#include "solver.hpp"
#include <iostream>
#include <complex>

class RealVariable
    {
        public:
        std::complex<double>c;
        RealVariable(double d)
          {
            c.imag(0);
            c.real(d);
          }
        RealVariable(){}
   };

    class ComplexVariable
    {
        public:
        std::complex <double>d;
        ComplexVariable(double d1,double d2)
         {
          d.imag(d2);
          d.real(d1);
         }
        ComplexVariable(){}

    };

На первый взгляд определение в файлах .hpp и. cpp выглядит идентично (по крайней мере мне).

Я получаю эту ошибку в терминале: enter image description here

Ответы [ 2 ]

1 голос
/ 01 мая 2020

В вашем CPP файле только реализации должны go.

#include "solver.hpp"

RealVariable::RealVariable(double d)
{
    c.imag(0);
    c.real(d);
}

RealVariable::RealVariable()
{
}

ComplexVariable::ComplexVariable(double d1,double d2)
{
  d.imag(d2);
  d.real(d1);
}

ComplexVariable::ComplexVariable()
{
}
0 голосов
/ 01 мая 2020

Вы не можете иметь два определения одного и того же класса, даже если они «идентичны». Ваш .hpp файл содержит определения классов, поэтому вы не можете иметь их (снова) в вашем .cpp файле.

Вместо этого просто предоставьте необходимые определения функций-членов в вашем .cpp файле. :

#include "solver.hpp"
#include <iostream>
#include <complex>

RealVariable::RealVariable(double d)
{
    c.imag(0);
    c.real(d);
}

RealVariable::RealVariable(){} // Though this could easily go 'inline' in the .hpp file

ComplexVariable::ComplexVariable(double d1,double d2)
{
    d.imag(d2);
    d.real(d1);
}

ComplexVariable::ComplexVariable(){} // Again, could readily be inline in the header
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...