[英]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.