为“virtual void”指定的返回类型有冲突

Dom*_*oSL 2 c++ arduino

我正在尝试从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)'
Run Code Online (Sandbox Code Playgroud)

检查 sha1.h 文件的该行我得到:

virtual void write(uint8_t);
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*men 5

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

该标准继续讨论返回类型“协变”的含义。这与类的指针和引用有关。我的建议:采取简单的方法并始终使返回类型相同。然后,您不必担心重写和重写虚函数的返回类型是否协变。

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