C++ 自定义结构像int一样与进行交互?

C++ 自定义结构像int一样与进行交互?,c++,struct,constants,custom-operator,C++,Struct,Constants,Custom Operator,我正在尝试创建一个可以与之交互的结构,就好像它是一个int。但是,当我尝试为它赋值时,它在编译时会抛出以下错误: Invalid conversion from `int` to `int32*` 为什么它会抛出那个错误,即使我让它是=操作符来处理将int32设置为const int值 以下是我在int32上的最佳尝试的源代码: struct int32 { int32_t val; int32(int val=0) : val(val) { } int32&a

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

Invalid conversion from `int` to `int32*`
为什么它会抛出那个错误,即使我让它是
=
操作符来处理将
int32
设置为
const 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\u t
;我制作自己的
struct
是有原因的(否则我会首先使用
int32\t

根据您的评论判断,您这样做:

int32 *i = 42;
您正在尝试将值42分配给指针,但在这里无效。删除
*
并调用构造函数:

int32 i(42);
如果需要指向该对象的指针,则只需获取其地址:

int32 my_int32(42);
int32 *i = &my_int32;
如果您有一个指向现有
int32
对象的指针,并且希望为该对象指定一个新值,则可以取消对该指针的引用:

int32 *i = ...;
*i = 42;
是一个问题,因为您正试图用编号为
42
的值初始化
int32*

也许你想用:

int32 i = 42;
但是,这将调用构造函数,而不是赋值运算符

要调用赋值运算符,请使用:

int32 i;
i = 42;

避免使用指针
int32*
是问题的根源(此处未显示)您使用的是
int32*
而不是
int32
?您需要发布导致错误的代码。@templatetypedef我使用指针,因为我正在将此代码与我的个人垃圾收集器集成(我没有用它来测试这个结构,因为我甚至没有让结构本身正常工作)你是想写
int32 i=42;
而不是
int32*i=42;
?我试着用
int32*i=42;
替换
int32*i;
,但它仍然不起作用。新错误:
赋值的左操作数需要左值
@JosephCaruso我想你需要学习指针,然后再回到这个问题上来@eldardorzhiev我试图避免使用新的操作符(我希望int32“I”像正常的int一样随堆栈一起死亡,但我想我可以修改垃圾收集器来处理这个问题。哦,我的问题出在我身上,我愚蠢地把&I而不是*I放在阻止I…(Facepalm)@JosephCaruso
int32*i;*i=42;
也不起作用。如果你想让
int32
在堆栈上,那么就把它放在堆栈上,而不是乱搞指针。
int32 i=42;
。完成了。它特别需要是
int32*
…这需要我编辑
int32
?@JosephCaruso如果你没有需要一个指针,只需正常构造它并获取它的地址:
int32 my_int32(42);int32*i=&my_int32;
@JosephCaruso您会注意到
int*i=42;
也不起作用。如果您使用的是一个正常的
int
,而不是
int32
,您会怎么做您想做的事情?
int32 i;
i = 42;