自定义结构与它是一个int进行交互?

时间:2016-10-03 21:54:44

标签: c++ struct const custom-operator

我试图创建一个可以与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开始;)

2 个答案:

答案 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;