为'virtual void'指定的冲突返回类型

时间:2013-10-13 15:25:08

标签: c++ arduino

我试图从Cryptosuite为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);

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

1 个答案:

答案 0 :(得分:4)

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

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

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