自定义结构与 int 交互?
Custom struct interacted with as if it were an int?
我正在尝试创建一个可以像 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_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;
是一个问题,因为您正在尝试用数字 42
.
初始化 int32*
也许你打算使用:
int32 i = 42;
但是,这会调用构造函数,而不是赋值运算符。
要调用赋值运算符,请使用:
int32 i;
i = 42;
我正在尝试创建一个可以像 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_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;
是一个问题,因为您正在尝试用数字 42
.
int32*
也许你打算使用:
int32 i = 42;
但是,这会调用构造函数,而不是赋值运算符。
要调用赋值运算符,请使用:
int32 i;
i = 42;