2013-10-13 28 views
1

我試圖編譯一個來自Cryptosuite的Arduino示例。即時得到這個錯誤:'virtual void'指定的衝突返回類型

In file included from sha1test.pde:1: 
C:\Program Files (x86)\Arduino\libraries\Sha/sha1.h:26: error: conflicting return type specified for 'virtual void Sha1Class::write(uint8_t)' 
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/Print.h:48: error: overriding 'virtual size_t Print::write(uint8_t)' 

檢查該行的sha1.h文件,我得到的:

virtual void write(uint8_t); 

我相信,期待一個不同類型的變量,但我不知道如何解決這個問題。

+2

這個C++不是c。 – ouah

+0

@ouah:哈哈,德哦...發現! –

+0

@ouah謝謝,我做了一個編輯 – DomingoSL

回答

3

重寫函數的返回類型爲void,而重寫函數的返回類型爲size_t。這是違法的。根據標準,「重寫函數的返回類型應與重寫函數的返回類型相同或與函數的類協同工作」(C++ 10.3.5,標準的2003和2011版本)。

該標準繼續討論返回類型是「協變」意味着什麼。這與指針和類的引用有關。我的建議:採取簡單的方法,並始終使返回類型相同。那麼你不必擔心重寫和重載虛函數的返回類型是否是協變的。

在這種情況下,voidsize_t既不相同也不協變。