2016-03-16 28 views
0

我上課的時候Graf看起來是這樣的:沒有可行的重載「=」分配的對象到另一個

class graf{ 
private: 
    int n, m; 
    nod a[100]; 
public: 
    graf(int n, int m); 
    graf operator~(); 
}; 

nod類看起來是這樣的:

class nod{ 
private: 
    muchie *a; 
public: 
    nod(); 
    nod(nod &x); 
    ~nod(); 
    nod &operator=(nod &x){ 
     int i; 
     this->id=x.id; 
     this->nr=x.nr; 
     for(i=0;i<=nr;i++) this->a[i]=x.a[i]; 
     return *this; 
    } 
    void operator+(nod &y); 
}; 

當我嘗試運行簡單代碼如下,編譯器會說:No viable overloaded '='。如果我在nod內刪除'='過度充電,將不會出現錯誤,所以我想問題在於這種過度充電?我真的無法弄清楚什麼是錯的。

graf gt(4,4); 
gt=~g; // where g is an already declared graf      

的問題是不是~過充,我試了一下無=過充電和它可能properply運行代碼。

編輯:

graf graf::operator~(){ 
    nod nodc; 
    int i,j; 
    graf gt(this->getN(), this->getM()); 

    for(i=1;i<=this->getN();i++){ 
     nodc=this->getNode(i); 
     for(j=0;j<=nodc.getNr();j++){ 
      gt.getNode(nodc.getMuchie(j).getY()->getId()) + (gt.getNode(nodc.getMuchie(j).getY()->getId()), gt.getNode(i)); 
     } 
    } 
    return gt; 
} 
+5

不要讓我們矇在鼓裏。編譯器不只是說「沒有可行的重載」='「。它還明確指出了它試圖做的事情,從而觸發了缺乏超載的情況。那是...?我猜測它說明了一個關於期望值的問題。在這種情況下,您的'operator ='可以更好地服務於採用'const'引用而不是熱門引用。 'nod&operator =(nod const&x)' – WhozCraig

+1

'nod&operator =(nod&x)'想要一個非const引用。看起來你在非const引用不能綁定到參數的上下文中使用它。你也沒有發佈最小,完整和可驗證的例子,所以我投票結束這個。 – SergeyA

+0

你可以顯示'graf operator〜();'的代碼嗎? –

回答

2

nod &operator=(nod &x)不得不改爲nod &operator=(const nod &x)

相關問題