自定义结构体与之交互,就好像它是int型一样

Custom struct interacted with as if it were an int?

本文关键字:int 一样 结构体 交互 自定义      更新时间:2023-10-16

我正在尝试创建一个可以与之交互的结构,就好像它是一个int。但是,当我尝试给它赋值时,它在编译时抛出以下错误:

Invalid conversion from `int` to `int32*`

为什么它抛出这个错误,即使我使它的=操作符来处理设置int32const int值?

这是我在int32的最佳尝试的源代码:

struct int32
{
  int32_t val;
  int32(int val=0)
    : val(val)
  {
  }
  int32& operator=(const int value) // ex. int32 *i = 42;
  {
    val=value;
    return *this;
  }
  int32 operator+(const int32& value) const
  {
    return int32(value.val+val);
  }
  int32 operator-(const int32& value) const
  {
    return int32(value.val-val);
  }
  int32 operator*(const int32& value) const
  {
    return int32(value.val*val);
  }
  int32 operator/(const int32& value) const
  {
    return int32(value.val/val);
  }
  int32 operator%(const int32& value) const
  {
    return int32(value.val%val);
  }
  bool operator==(const int32& value) const
  {
    return (val == value.val);
  }
  bool operator!=(const int32& value) const
  {
    return (val != value.val);
  }
}

另外,请不要仅仅建议我使用int32_t;我正在制作自己的struct是有原因的(否则我只会使用int32_t开始;)

从你的评论来看,你正在这样做:

int32 *i = 42;

你试图将值42赋值给指针,这在这里不起作用。去掉*并调用构造函数:

int32 i(42);

如果你需要一个指向该对象的指针,那么你可以简单地获取它的地址:

int32 my_int32(42);
int32 *i = &my_int32;

如果你有一个指向现有int32对象的指针,并且想给该对象赋一个新值,你可以对指针解引用:

int32 *i = ...;
*i = 42;
int32 *i = 42;

是一个问题,因为你试图初始化一个int32*与数字42

也许你想用:

int32 i = 42;

但是,这会调用构造函数,而不是赋值操作符。

调用赋值操作符,使用:

int32 i;
i = 42;