2013-03-08 42 views
2

我是C#程序員,不太瞭解C++。 任何想法,爲什麼我得到錯誤?爲什麼下面的代碼不覆蓋C++ CLI中的基類屬性?

ref class masterWeapon{ 
public : 
    virtual property int Slot { 
     int get(){ 
      return -1; 
     } 
    } 
}; 

ref class Weapon1 : masterWeapon{ 

public : 
    virtual property int Slot{ 
//following like throw an error : cannot override base class method 
     int get() override = masterWeapon::Slot::get{ 
      return 1; 
     } 
    } 

}; 
+0

這不是有效的C++。 – juanchopanza 2013-03-08 19:27:57

+2

@juanchopanza但是也許它是有效的C++ - cli * shudder *:p – poitroae 2013-03-08 19:28:23

+0

這是C++ 0x CLI(Managed C++) – 2013-03-08 19:28:34

回答

4

只要刪除= masterWeapon::Slot::get部分,它會編譯。如果你閱讀隨附C3764錯誤信息它使這一點更加明顯(但不是100%):

...因爲基方法是通過'Weapon1::Slot::get'

明確覆蓋給我們下面的代碼:

ref class Weapon1 : masterWeapon{ 
public : 
    virtual property int Slot { 
     int get() override { 
      return 1; 
     } 
    } 
}; 

,當針對其運行:

masterWeapon^ weapon1 = gcnew masterWeapon(); 
masterWeapon^ weapon2 = gcnew Weapon1(); 

Console::WriteLine(L"weapon1->Slot = {0}", weapon1->Slot); 
Console::WriteLine(L"weapon2->Slot = {0}", weapon2->Slot); 

結果:

weapon1->插槽= -1

weapon2->插槽= 1

+0

其實我正在這個工作超過一個小時,無法弄清楚!謝謝 – 2013-03-08 19:42:12

相關問題