【发布时间】:2021-07-26 04:36:09
【问题描述】:
我想创建一种 2 维向量数据类型和一种 3 维向量数据类型,但它们应该相互兼容。
这是类定义
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;
}
我希望能够调用这样的函数:
// 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 vec2;
class vec3;
到顶部,出现以下链接器错误:'LNK2005 "public: __cdecl vec2::vec2(class vec3)" already defined in main.obj'
但是如果我删除类原型,就会出现这个错误:'C2061 syntax error vec3'(因为构造函数声明“vec2(vec3 V);”在类vec2中。
注意我也加了
vec2::vec2(vec3 V)
{
x = V.x;
y = V.y;
}
在类之外,因为 vec3 尚未定义并且会抛出:“use of undefined type”
【问题讨论】:
-
两者都应该互相兼容,你的意思是convertible?
标签: c++ class vector constructor