2013-05-15 97 views
1

我有此類:C++分配內存一類

class myClass{ 
    public: 
     myClass(string label); 
     ~myClass(); 
     string myget(); 
     void myset(string label); 

     void myadd(class2 * edge); 
    private: 
     string label; 
     vector<class2 *> myList; 
}; 

我想要寫,其檢查類型myClass的的對象的相等的函數:

bool operator== (myClass& l,myClass& r) 
{   

} 

爲了檢查myList中載體對於這些對象,我想複製l和r,對副本的向量進行排序,並檢查這些副本的排序向量是否相等。但我認爲我沒有製作l和r的副本。下面是我寫爲:

myClass x = new myClass("s1"); 
myClass y = new myClass("s2"); 


x = l; 
y = r; 
sort(x.myList.begin(),x.myList.end()); 
sort(y.myList.begin(),y.myList.end()) 
if(x == y) 
    return true; 
    else 
    return false; 

該代碼給出了這樣的錯誤:錯誤:轉換,從「myClass的*」非標量類型「MyClass的」要求。

我試着製作x和y指針,但它也沒有工作。你能告訴我如何解決這個問題嗎?

在此先感謝。

+0

*「我嘗試製作x和y指針,但它不起作用」*「不起作用」是什麼意思? –

+0

轉換運算符應該接受'const&'。 – pmr

+0

@DrewDormann 'myClass * x = new myClass(「s1」); myClass * y = new myClass(「s2」);' 這導致函數的其他部分出現另一個錯誤 – jason

回答

5
myClass x = new myClass("s1"); - here is the problem 

運算符new返回一個指針。讓你無論是存儲指針或只是

myClass x = myClass("s1"); - should be so (stack) 
myClass *x = new myClass("s1"); - or so (heap) 
4

你是不是忘記聲明x和y爲指針自動存儲(通常爲棧引用)創建副本?

myClass* x = new myClass("s1"); 
myClass* y = new myClass("s2"); 
3

假設你只需要在類「活」爲您的類的時間,你可以這樣做:

myClass x("s1"); 

或者

myClass x = myClass("s1"); 

如果你需要有一個指針以便該功能可以將其傳遞迴呼叫功能:

myClass *x = new myClass("s1");