Я пытаюсь создать структуру, с которой можно взаимодействовать, как если бы она была 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;
это проблема, так как вы пытаетесь инициализировать int32*
с номером 42
,
Возможно, вы хотели использовать:
int32 i = 42;
Однако это вызвало бы конструктор, а не оператор присваивания.
Чтобы вызвать оператор присваивания, используйте:
int32 i;
i = 42;