2

をintにオブジェクト私はこのようなオブジェクトへの代入int型に問題があります。変換 -

class Wurzel{ 
private: 
    int wurzelexponent; 
    int wert; 

public: 

    Wurzel(){ 
     wurzelexponent=1; 
     wert=1; 
    } 

    Wurzel& operator =(const Wurzel &w) { 

     wurzelexponent = w.wurzelexponent; 

    } 
}; 
:代入演算子と

int main() { 
    Wurzel a; 
    Wurzel b=3; // error: conversion from 'int' to non-scalar type 'Wurzel' requested 

    return 0; 
} 

私のクラスを

私はこれを=の演算子で行う必要があります

問題はどこですか?

答えて

4

私は、することはできません=演算子

でこれを行う必要があります。 Wurzel b=3;は割り当てではないため、初期化はcopy initializationです。エラーメッセージには、converting constructorが必要です。

class Wurzel{ 
    ... 
public: 
    ... 
    Wurzel(int x) : wurzelexponent(x), wert(1) {} 
    Wurzel(int x, int y) : wurzelexponent(x), wert(y) {} 
    ... 
}; 

次いで

Wurzel b = 3;  // Wurzel::Wurzel(int) will be called 
Wurzel b = {3, 2}; // Wurzel::Wurzel(int, int) will be called [1] 

などoperator=のみ割り当てに使用されることに注意してください、:複数のパラメータを有する変換コンストラクタがCから導入された[1]

Wurzel b;  // default initialized 
b = something; // this is assignment, operator=() will be used 

++ 11。

0

あなたはint:Wurzel b=3;をおろそうとしていますが、あなたの演算子=はconst Wurzel &wのためだけにオーバーロードされています。そのパラメータはWurzelであり、intではなく、intは暗黙的にWurzelに変換可能ではありません。修正するには、別のオペレータを追加することができます。

Wurzel& operator =(int i) 
{} 
+1

いいえ、ありません '演算子'が、コンストラクタはワーゼルのB = 3 'のために呼び出されます;':

これを試してみてください。 – MikeCAT

0

問題は、必要な機能が定義されていないということです。

=オペレータを受け入れるためのオーバーロードが1つあります。intです。 =

class Wurzel{ 
private: 
    int wurzelexponent; 
    int wert; 

public: 

    Wurzel(){ 
     wurzelexponent=1; 
     wert=1; 
    } 
    // this is constructor, not = operator 
    /* 
    Wurzel(int a) { 
     wurzelexponent = a; 
     wert = a; 
    } 
    */ 

    Wurzel& operator =(const Wurzel &w) { 

     wurzelexponent = w.wurzelexponent; 
     return *this; // you should return something 

    } 
    Wurzel& operator=(int a) { 
     // implement as you like 
     wurzelexponent = a; 
     return *this; 
    } 
}; 

int main() { 
    Wurzel a; 
    // this is not = operator but initializing 
    //Wurzel b=3; 

    Wurzel b; 
    b = 3; // this is = opetator, which you say you must use 

    return 0; 
} 
+0

しかし、なぜ私は 'Wurzel b = 3'を使用できないのですか?私は直接割り当てすることはできませんか?あなたの解決策のために私のオペレータは必要ですか? 'Wurzel&operator =(const Wurzel&w)' – lukassz

+0

コンストラクタを直接呼び出すことで*を初期化できますが、*代入*(代入演算子を使って)を直接行うことはできません。 'Wurzel b = 3;'は適切なコンストラクタを定義することで行うことができますが、 '='演算子を使う必要があるので、コンストラクタの定義のどこかで使用する必要がありますか?あなたのオペレータはこのプログラムでは必要ありません。 – MikeCAT

+0

コンストラクタの定義は?どういう意味?問題は、クラスIに2つの変数があることです。次に、それらを別々に開始すると、どういうふうに区別する必要があります。 – lukassz