Пользовательская структура взаимодействует, как если бы она была 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 начать с;)

2 ответа

Решение

Судя по вашим комментариям, вы делаете это:

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;
Другие вопросы по тегам