2

我有分配INT問題反對這樣的:轉換 - 對象爲int

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

    return 0; 
} 

我的類賦值操作符:

class Wurzel{ 
private: 
    int wurzelexponent; 
    int wert; 

public: 

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

    Wurzel& operator =(const Wurzel &w) { 

     wurzelexponent = w.wurzelexponent; 

    } 
}; 

我必須這樣做=運營商

問題在哪裏?

回答

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=僅用於分配,如:

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

[1]轉換與多個參數構造方法由C引入++ 11。

0

您試圖assing一個int:Wurzel b=3;,但你的運營商=只重載const Wurzel &w。它的參數是Wurzel,不是int,int不能隱式轉換爲Wurzel。要修復,可以添加另一個運算符:

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

不,不是'運營商='但一個構造函數將被調用'吳志祥B = 3;'。 – MikeCAT

0

問題是所需功能未定義。

一個解決方案是超載=運營商接受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

構造函數的定義?你究竟是什麼意思?問題是,在課堂上,我有兩個變量,然後我必須以某種方式區分他們,如果我分別啓動他們。 – lukassz