2013-10-03 51 views
2

我們有以下幾點: (pseudoish)重載運算符=的結構,內部的階級

class MyClass 
{ 
    private: 
     struct MyStruct{ 
      MyStruct operator=(const MyOtherStruct& rhs); 
      int am1; 
      int am2; 
     }; 
}; 

我們想重載=運營商在MyClass.cpp做這樣的事情:

MyStruct& 
MyStruct::operator=(const MyOtherStruct& rhs) 
{ 
    am1 = rhs.am1; 
    am2 = rhs.am2; 
} 

但是,它不想編譯。我們得到類似

一個錯誤 「失蹤;在此之前&」

「如果後面:: MYSTRUCT必須是類或命名空間」

這裏有一些我失蹤的概念嗎?

+1

爲什麼你有2個返回類型在你的operator =函數上? – goji

+0

嘿謝謝,修好了! – MrDuk

+1

你缺少資格。課堂之外沒有'MyStruct'。 – chris

回答

2

您需要將您的operator=MyStruct到struct聲明體:

class MyClass 
{ 
    private: 
     struct MyStruct{ 
      int am1; 
      int am2; 

      MyStruct& operator=(const MyOtherStruct& rhs) 
      { 
      am1 = rhs.am1; 
      am2 = rhs.am2; 
      return *this; 
      } 
     }; 
}; 

或者,如果這是不可能的,因爲MyOtherStruct不完整或不想要混亂類聲明:

class MyClass 
{ 
    private: 
     struct MyStruct{ 
      int am1; 
      int am2; 

      MyStruct& operator=(const MyOtherStruct& rhs); 
     }; 
}; 

inline MyClass::MyStruct& MyClass::MyStruct::operator=(const MyOtherStruct& rhs) 
{ 
    am1 = rhs.am1; 
    am2 = rhs.am2; 
    return *this; 
} 
+0

沒有完成編輯其他選項.... – goji

+0

對不起,但我不得不評論我實際看到的。 ;) – syam

+0

爲什麼我們在這裏使用'inline'?需要嗎? – MrDuk

2

的語法是

MyStruct& operator=(const MyOtherStruct& rhs) { 
    // assignment logic goes here 
    return *this; 
} 

用於操作者直接的MyStruct主體內。另外請注意,我添加了慣用的return *this以讓賦值返回對該對象的引用。

編輯迴應OP編輯問題。 您也可以在主體中聲明操作符,並在其他地方定義它。在這種情況下,語法是:

MyClass::MyStruct& MyClass::MyStruct::operator=(const MyOtherStruct& rhs) { 
    // assignment logic goes here 
    return *this; 
}