我试图从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年版本)。
该标准继续讨论返回类型"协变"的含义。这与指针和对类的引用有关。我的建议:采取简单的方法,并始终使返回类型相同。然后,您不必担心来自重写和覆盖虚函数的返回类型是否是协变的。
在这种情况下,void
和 size_t
既不相同也不协变。