2016-10-03 3 views
-1

私はそれがintであるかのように相互作用できる構造を作成しようとしています。私はそれに値を代入しようとすると、しかし、それはコンパイル時に次のエラーがスローされます。カスタム構造体は、あたかもintであるかのように相互作用しますか?

Invalid conversion from `int` to `int32*` 

なぜそれが私はそれがconst int値にint32を設定処理するために=オペレータの作られていても、そのエラーをスローしません?

ここ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を使用することをお勧めしないでください。私は(そうでない場合、私はちょうどで開始するint32_tを使用していたと思います;)理由struct自分を作ってるんだあなたのコメントから判断

+2

避けポインタを:

は使用し、代入演算子を呼び出します。 'int32 *'はトラブルの原因です(ここには表示されていません) –

+1

'int32 *'ではなく 'int32'を使用している理由は何ですか? – templatetypedef

+0

エラーの原因となるコードを投稿する必要があります。 – Galik

答えて

4

、あなたはこれをやっている:

int32 *i = 42; 

あなたがしようとしています値42をポインタに代入します。ポインタはここでは動作しません。 *を削除し、代わりにあなたのコンストラクタを呼び出します。

int32 i(42); 

を使用すると、そのオブジェクトへのポインタが必要な場合は、単にそのアドレス取ることができます:あなたは、既存のint32オブジェクトへのポインタを持っている場合は

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

を、とすることができます、オブジェクトに新しい値を割り当てたいポインタを間接参照:

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

私は 'int32 * i = 42;'を 'int32 * i;に置き換えようとしました。 &i = 42; 'それでも動作しません。新しいエラー: '左辺の代入として左辺値が必要です ' –

+1

@JosephCaruso' int32 * i = new int32(42) 'は動作します –

+4

@JosephCarusoこの問題に戻ってくるポインタについては、 – Galik

2
int32 *i = 42; 
番号 42int32*を初期化しようとしているため、

が問題になります。

はおそらく、あなたが使用することを意味:

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; 'は動作しません。 'int32'の代わりに通常の' int'を使用していたらどうしたらいいですか? – immibis

関連する問題