C++ C++;:重新定义a';类名';
我正在写一段代码,描述一个复变量和一个实变量 我已经包含了头文件,它似乎在.hpp文件和.cpp文件之间产生了冲突 他们是相似的,我无法追踪重新定义发生在哪里 solver.hppC++ 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
#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++文件中的类,只需定义函数即可。