2

我试图从Cryptosuite for Arduino 编译一个示例。我收到此错误:

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);

我相信期待不同类型的变量,但我不知道如何解决这个问题。

4

1 回答 1

5

重写函数的返回类型为 ,void而重写函数的返回类型为size_t。那是违法的。根据标准,“覆盖函数的返回类型应与被覆盖函数的返回类型相同或与函数的类协变”(C++ 10.3.5,标准的 2003 和 2011 版本)。

该标准继续讨论返回类型“协变”意味着什么。这与类的指针和引用有关。我的建议:采取简单的方法并始终使返回类型相同。然后您不必担心来自被覆盖和覆盖的虚函数的返回类型是否是协变的。

在这种情况下,voidsize_t既不相同也不协变。

于 2013-10-13T15:56:25.790 回答