Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:重新定义a';类名';_C++_Header Files_Ambiguity_Redefinition - Fatal编程技术网

C++ C++;:重新定义a';类名';

C++ C++;:重新定义a';类名';,c++,header-files,ambiguity,redefinition,C++,Header Files,Ambiguity,Redefinition,我正在写一段代码,描述一个复变量和一个实变量 我已经包含了头文件,它似乎在.hpp文件和.cpp文件之间产生了冲突 他们是相似的,我无法追踪重新定义发生在哪里 solver.hpp #include <iostream> #include <complex> class RealVariable { public: std::complex<double>c; RealVariable(double

我正在写一段代码,描述一个复变量和一个实变量

我已经包含了头文件,它似乎在.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();

    };
#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(){}

    };


#包括
#包括
类实变量
{
公众:
std::complexc;
RealVariable(双d);
RealVariable();
};
类复杂变量
{
公众:
std::复合物d;
复合变量(双d1,双d2);
ComplexVariable();
};
解算器.cpp


#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();

    };
#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(){}

    };

#包括“solver.hpp”
#包括
#包括
类实变量
{
公众:
std::complexc;
RealVariable(双d)
{
c、 imag(0);
c、 雷亚尔(d);
}
RealVariable(){}
};
类复杂变量
{
公众:
std::复合物d;
ComplexVariable(双d1,双d2)
{
d、 imag(d2);
d、 不动产(d1);
}
ComplexVariable(){}
};
表面上,定义 在.hpp和.cpp文件中看起来完全相同(至少在我看来是这样)

我在终端中收到此错误:

在您的CPP文件中,只有实现应该被删除

#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()
{
}

同一类不能有两个定义,即使它们“相同”。您的
.hpp
文件提供了类定义,因此您的
.cpp
文件中不能(再次)包含这些定义

相反,只需在
.cpp
文件中提供所需的成员函数定义:

#包括“solver.hpp”
#包括
#包括
RealVariable::RealVariable(双d)
{
c、 imag(0);
c、 雷亚尔(d);
}
RealVariable::RealVariable(){}//虽然这可以很容易地在.hpp文件中“内联”
ComplexVariable::ComplexVariable(双d1,双d2)
{
d、 imag(d2);
d、 不动产(d1);
}
ComplexVariable::ComplexVariable(){}//同样可以很容易地内联到标头中

在C++中,一般不重新定义C++文件中的类,只需定义函数即可。