为"虚拟无效"指定的冲突返回类型



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

In file included from sha1test.pde:1:
C:Program Files (x86)ArduinolibrariesSha/sha1.h:26: error: conflicting return type specified for 'virtual void Sha1Class::write(uint8_t)'
C:Program Files (x86)Arduinohardwarearduinocoresarduino/Print.h:48: error:   overriding 'virtual size_t Print::write(uint8_t)'

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

virtual void write(uint8_t);

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

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

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

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

最新更新