2016-10-03 41 views
-1

我正在尝试创建一个可以与之互动的结构,就好像它是一个int。然而,当我尝试将值分配给它,它在编译引发以下错误:自定义结构与交互,就好像它是一个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

避免指针。 'int32 *'是麻烦的根源(这里没有显示) –

+1

你使用int32 *'而不是'int32'的任何原因? – templatetypedef

+0

您需要发布导致错误的代码。 – Galik

回答

4

您的评论来看,你这样做是:

int32 *i = 42; 

你试图将值42分配给指针,这在这里不起作用。放下*并调用构造函数来代替:如果你有一个指针

int32 my_int32(42); 
int32 *i = &my_int32; 

到现有int32对象:

int32 i(42); 

如果你需要一个指向对象,然后你可以简单地采取其地址和要指派一个新值的对象,就可以取消引用指针:

int32 *i = ...; 
*i = 42; 
+0

我试着用'int32 * i替换'int32 * i = 42;'; &i = 42;'但它仍然不起作用。新的错误:'作为左值操作数需要左值赋值' –

+1

@JosephCaruso'int32 * i = new int32(42)'会工作 –

+4

@JosephCaruso我认为你需要依赖指针然后回到这个问题。 – Galik

2
int32 *i = 42; 

是一个问题,因为您尝试初始化int32*的编号为42

也许你想用的:

int32 i = 42; 

然而,这将调用构造函数,而不是赋值运算符。

要调用的赋值操作符,使用方法:

int32 i; 
i = 42; 
+0

它特别需要是一个'int32 *'...这需要我编辑'int32'吗? –

+0

@JosephCaruso如果你需要一个指针,只需构造它并获取它的地址:'int32 my_int32(42); int32 * i =&my_int32;' – Riot

+0

@JosephCaruso您会注意到'int * i = 42;'也不起作用。如果你使用普通的'int'而不是'int32',你会怎么做? – immibis

相关问题