1
我有兩個類具有相同的純虛方法:如何在類聲明之外實現我的顯式重寫?
class InterfaceA
{
public: virtual void doSomething() = 0;
};
class InterfaceB
{
public: virtual void doSomething() = 0;
};
我具有從這些接口派生的類。我想覆蓋每個虛函數 。我可以這樣做(這工作):
class ConcreteClass : public InterfaceA, public InterfaceB
{
public:
void InterfaceA::doSomething() override
{
printf("In ConcreteClass::InterfaceA::doSomething()\n");
}
void InterfaceB::doSomething() override
{
printf("In ConcreteClass::InterfaceB::doSomething()\n");
}
};
但是我的問題是,我怎麼能有我的方法的定義之外的類聲明?所以我可以讓他們在我的.cpp文件中。我想這第一:
// .h
class ConcreteClass : public InterfaceA, public InterfaceB
{
public:
void InterfaceA::doSomething() override;
void InterfaceB::doSomething() override;
};
// .cpp
void ConcreteClass::InterfaceA::doSomething()
{
printf("In ConcreteClass::InterfaceA::doSomething()\n");
}
void ConcreteClass::InterfaceB::doSomething()
{
printf("In ConcreteClass::InterfaceB::doSomething()\n");
}
這並不在Visual C++ 2005(VS 2005)編譯:
error C2509: 'doSomething' : member function not declared in 'ConcreteClass'
是否需要以特定的sintax進行編譯?
微軟的MSDN文檔有一個工作示例。但他們使用__interface擴展名。我想達到相同的目標,但是符合標準C++ 03的代碼,如果它是可能的話。
謝謝!
了'override'關鍵字是C++ 11的功能,和VS 2005使用一個編譯器在規範創建之前編寫。實際上並不需要指定'override'來實現虛函數。我建議嘗試刪除關鍵字。 –
@Nicolas我正在使用的是當時使用的MS擴展。我可能不應該用這個例子來使它更清晰。但是,刪除它並不能解決問題:(謝謝 – QuinoaWrap
好的,所以你的問題實際上是來自兩個接口的類似命名的函數? –