我正在制作Radian课程和Degree课程。每个类都有一个构造函数,它将另一个类型的对象作为参数,进行度/弧度转换,并用结果初始化degree或radian参数,如下所示。
Class Radian
{
private:
double radians;
public:
// ......
Radian(Degree d) {
radians = d.getDegrees() * (pi / 180);
}
// ...
学位课程的方式相同但相反。因此,为了确保没有某种链接错误,每个标题#include另一个?他们各自的.cpp怎么样?我需要前瞻性声明吗?
答案 0 :(得分:1)
你需要做三件事(可能是四件事):
#ifndef RADIAN_H...
class Degree;
getDegrees()
const &
个参数。答案 1 :(得分:0)
在这种情况下你应该使用前向声明。
答案 2 :(得分:0)
由于它们紧密相连,因此它们可能属于单个文件。这使得编写两个内联构造函数成为可能:
class radian;
class degree {
public:
degree(radian r);
private:
double degrees;
};
class radian {
public:
radian(degree d);
private:
double radians;
};
inline degree::degree(radian r) : degrees(r.get_radians() * 180 / pi) { }
inline radian::radian(degree d) : radians(d.get_degrees() * pi / 180) { }
答案 3 :(得分:0)
我可能会做以下事情:
<强> forward.hpp 强>
#pragma once
class Radian;
class Degree;
<强> radian.hpp 强>
#pragma once
#include "forward.hpp"
class Radian {
public:
Radian(Degree d);
private:
double radians;
};
<强> radian.cpp 强>
#include "radian.hpp"
#include "degree.hpp"
Radian::Radian(Degree d) {
radians = d.getDegrees() * (pi / 180);
}
<强> degree.hpp 强>
#pragma once
#include "forward.hpp"
class Degree {
public:
Degree(double x);
double getDegrees() const;
private:
double deg;
}
<强> degree.cpp 强>
#include "degree.hpp"
Degree::Degree(double x) {
deg = x;
}
double Degree::getDegrees() const {
return deg;
}