gpt4 book ai didi

c++ - 在两个以上类的对象之间重载 operator=

转载 作者:行者123 更新时间:2023-11-30 02:55:58 25 4
gpt4 key购买 nike

我正在为我的应用程序定义三个类:int2_(整数对)、float2_( float 对)和 double2_( double ),本质上是执行复杂的算术运算。

我想重载上面三个类的对象之间的赋值运算符=。动机是我正在编写 CUDA 代码,但似乎没有为 CUDA 类 int2float2double2< 定义赋值运算符

我目前的实现如下:

class int2_ {

public:
int x;
int y;

int2_() : x(), y() {}

// Stuff
const int2_& operator=(const float2_ a) { int2_ b; b.x = (int)a.x; b.y = (int)a.y; return b; }
const int2_& operator=(const double2_ a) { int2_ b; b.x = (int)a.x; b.y = (int)a.y; return b; }
};

class float2_ {

public:
float x;
float y;

float2_() : x(), y() {}

// Stuff
const float2_& operator=(const double2_ a) { float2_ b; b.x = (float)a.x; b.y = (float)a.y; return b; }
};

class double2_ {

public:
double x;
double y;

double2_() : x(), y() {}

// Stuff
};

一切都总结为 stuff 不提供编译错误。其余运算符重载返回以下错误

error : identifier "float2_" is undefined
error : identifier "double2_" is undefined
error : identifier "double2_" is undefined

分别针对三种不同的重载。

似乎存在“可见性”问题,因为例如 float2_double2_ 尚未在 int2_< 之前定义 类定义。关于如何解决问题的任何建议?非常感谢您。

JAMES KANZE 和 ALEXRIDER 回答后的解决方案

解决方法如下:

class int2_;
class float2_;
class double2_;

class int2_ {

public:
int x;
int y;

int2_() : x(), y() {}

inline const int2_& operator=(const int a) { x = a; y = 0.; return *this; }
inline const int2_& operator=(const float a) { x = (int)a; y = 0.; return *this; }
inline const int2_& operator=(const double a) { x = (int)a; y = 0.; return *this; }
inline const int2_& operator=(const int2_ a) { x = a.x; y = a.y; return *this; }
inline const int2_& operator=(const float2_ a);
inline const int2_& operator=(const double2_ a);
};

class float2_ {

public:
float x;
float y;

float2_() : x(), y() {}

inline const float2_& operator=(const int a) { x = (float)a; y = 0.; return *this; }
inline const float2_& operator=(const float a) { x = a; y = 0.; return *this; }
inline const float2_& operator=(const double a) { x = (float)a; y = 0.; return *this; }
inline const float2_& operator=(const int2_ a) { x = (float)a.x; y = (float)a.y; return *this; }
inline const float2_& operator=(const float2_ a) { x = a.x; y = a.y; return *this; }
inline const float2_& operator=(const double2_ a);
};

class double2_ {

public:
double x;
double y;

double2_() : x(), y() {}

inline const double2_& operator=(const int a) { x = (double)a; y = 0.; return *this; }
inline const double2_& operator=(const float a) { x = (double)a; y = 0.; return *this; }
inline const double2_& operator=(const double a) { x = a; y = 0.; return *this; }
inline const double2_& operator=(const int2_ a) { x = (double)a.x; y = (double)a.y;return *this; }
inline const double2_& operator=(const float2_ a) { x = (double)a.x; y = (double)a.y;return *this; }
inline const double2_& operator=(const double2_ a) { x = a.x; y = a.y; return *this; }

};

inline const int2_& int2_::operator=(const float2_ a) { x = (int)a.x; y = (int)a.y; return *this; }
inline const int2_& int2_::operator=(const double2_ a) { x = (int)a.x; y = (int)a.y; return *this; }
inline const float2_& float2_::operator=(const double2_ a) { x = (float)a.x; y = (float)a.y; return *this; }

最佳答案

首先,您需要使用类的前向声明:

class Int2;
class Float2;
class Double2;

然后,在类中,你应该只声明函数,而不是实现它们。实现应该在所有之后类定义,在单独的源文件中,或者明确声明内联。

关于c++ - 在两个以上类的对象之间重载 operator=,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15992461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com