我试图创建一个可以与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
开始;)
答案 0 :(得分:4)
根据您的评论判断,您正在这样做:
def demicrosoft (fn):
dest = ""
for char in fn:
if char == ' ':
dest += '_'
elif char not in '()':
dest += char
return dest
您正在尝试将值42分配给指针,这在此处不起作用。删除int32 *i = 42;
并调用构造函数:
*
如果需要指向该对象的指针,则可以简单地获取其地址:
int32 i(42);
如果您有一个指向现有int32 my_int32(42);
int32 *i = &my_int32;
对象的指针,并且想要为该对象指定一个新值,则可以取消引用该指针:
int32
答案 1 :(得分:2)
int32 *i = 42;
是一个问题,因为您尝试使用数字int32*
初始化42
。
也许您打算使用:
int32 i = 42;
但是,这将调用构造函数,而不是赋值运算符。
要调用赋值运算符,请使用:
int32 i;
i = 42;