2011-02-18 43 views
2

可能重複:
What does 「operator = must be a non-static member」 mean? (C++)C++全局重載運算符=

嗨,

我有以下代碼...

// Header file 
    struct dataRecord{ 
    size_t id; 
    char name[gcNameLength]; 
    }; 

    void operator=(dataRecord &adr, const dataRecord &bdr); 

如何過的gcc給我跟隨編譯時發生錯誤。

error: ‘void operator=(dataRecord&, const dataRecord&)’ must be a nonstatic member function 

感謝您的幫助。

+0

「必須是一個非靜態成員函數「 - 這裏有什麼不清楚? – 2011-02-18 02:49:41

+0

錯誤消息在這種情況下非常精確地告訴問題:如果您要重載`operator =`,則不能將其作爲全局函數來執行 - 您必須使用非靜態成員函數(通常使用全局的理由是允許在左操作數上進行轉換,但在分配情況下不適用)。 – 2011-02-18 02:50:23

+0

所以它必須是結構的一部分,不能是全局的。 – Thomas 2011-02-18 02:50:29

回答

5

您需要在struct dataRecord本身上重載=操作。

喜歡的東西:

struct dataRecord{ 
    size_t id; 
    char name[gcNameLength]; 
    dataRecord& operator= (const dataRecord&) { 
     // write overload code here 
    } 
}; 
2

沒有這樣的事,作爲一個運算符=功能。運算符必須是類或結構的成員。該函數的參數作爲右值。具有成員函數的對象是左值。