2013-11-28 71 views
1

我正在C++中開發具有Cascades的BlackBerry 10應用程序。 我只是一個初學者,這個問題讓我很困惑。 我有一個類Parser和派生類LicenseParser使用在派生類中聲明的方法

Class Parser { 
    // implementation 
} 

Class LicenseParser : public Parser { 
    // ... 
    public: 
    void Parse(); 
} 

在另一個文件中:

Parser* p= new LicenseParser(); 
p->Parse(); 

但我得到了一個錯誤:

class Parser' has no member named 'parse' 

的方法Parse在派生類中聲明,所以我知道它可以使用沒有在Parser課堂上宣佈它!
我應該如何解決這個問題?

+0

Add virtual void parese()= 0;並且你有一個抽象基類,它不能被實例化。 –

+0

該代碼看起來是正確的,但錯誤消息意味着你試圖調用'parse'而不是'Parse' - C++區分大小寫。你確定你已經發布了*確切的*代碼和錯誤信息嗎? –

回答

1

錯誤發生,因爲p是一個指向Parser,而不是一個指針LicenseParser

儘管在知道p實際上指向LicenseParser,你分配給一個基類指針意味着你選擇不讓編譯器知道這件事。

您應該在基類中具有虛擬的Parse成員函數,或者讓變量p代替LicenseParser*

1

我認爲您的大小寫在parseParse之間不匹配。看看C++是否區分大小寫有助於修復。 (注:看起來你的編輯修正了我原來的答覆後

而且,因爲p被聲明爲Parser*,編譯器將標誌一個錯誤,因爲Parse沒有在Parser類中定義。在Parser(例如virtual void Parse() = 0;)中聲明一個純virtual函數Parse並且它應該被編譯(假設Parse在.cpp文件中被定義爲LicenseParser)。

你也可以聲明pLicenseParser*,因此並不需要聲明virtual功能ParseParser

這是否幫助?

0

"'class Parser' has no member named 'parse"

如果這是你所得到的,我認爲你應該改變大小寫。在拳頭文件聲明

void Parse(); 

而另一方面你要求

p->parse(); 
相關問題