[英]Two classes that refer to each other in their constructor
我想创建一个 2 维向量数据类型和一个 3 维向量数据类型,但它们都应该相互兼容。
这是 class 定义
class vec2;
class vec3;
class vec2
{
public:
FLOAT x, y;
vec2(FLOAT X = 0, FLOAT Y = 0)
{
x = X;
y = Y;
}
// constructor declaration (necessary because of "use of undefined type")
vec2(vec3 V);
};
class vec3
{
public:
FLOAT x, y, z;
vec3(FLOAT X = 0, FLOAT Y = 0, FLOAT Z = 0)
{
x = X;
y = Y;
z = Z;
}
vec3(vec2 V)
{
x = V.x;
y = V.y;
z = 0;
}
};
vec2::vec2(vec3 V)
{
x = V.x;
y = V.y;
}
我希望能够像这样调用 function:
// prototypes
int func_Vec2(vec2 Position);
int func_Vec3(vec3 Space);
// create variables
vec2 myPosition(100, 100);// creates a vector "myPosition" with x = 100, y = 100
vec3 mySpace(100, 200, 300);// creates a vector "mySpace" with x = 100, y = 200, z = 300
// call functions with compatible datatypes
func_Vec2(vec2(mySpace));// mySpace is vec3 but the constructor of vec2 allows a vec3 as parameter
func_Vec3(vec3(myPosition));// myPosition is vec2 but the constructor of vec3 allows vec2 as parameter
但是,无论我对 class 定义/构造函数进行了多少试验,每次尝试都会带来另一个错误,而且我已经没有想法了。
因为我加了
class vec2;
class vec3;
到顶部,出现以下 linker 错误:'LNK2005 "public: __cdecl vec2::vec2(class vec3)" already defined in main.obj'
但是,如果我删除 class 原型,则会发生此错误:'C2061 syntax error vec3'(由于 class vec2 中的构造函数声明“vec2(vec3 V);”。
请注意,我还添加了
vec2::vec2(vec3 V)
{
x = V.x;
y = V.y;
}
在 class 之外,因为 vec3 尚未定义并且会抛出:“使用未定义类型”
由于vec2::vec2(vec3 V)
在 .h 文件中实现,因此将其设为inline
。
inline vec2::vec2(vec3 V)
{
x = V.x;
y = V.y;
}
否则,包含 .h 文件的每个 .cpp 文件都具有构造函数的非内联实现。 这会导致 linker 报告的问题。
另一个选项是将定义移动到 a.cpp 文件(而不是使用inline
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.