以下是我的问题的MCVE:
#include <cstdlib>
#include <cstdint>
template<std::size_t CAPACITY>
class Buffer
{
public:
template<std::size_t PARAM_SIZE>
void pushArray(const uint8_t values[PARAM_SIZE])
{
// method's body (not important)
}
};
template<std::size_t CAPACITY>
class BetterBuffer : public Buffer<CAPACITY>
{
public:
template<typename TYPE>
void push(TYPE value)
{
typedef uint8_t arrayType_t[sizeof(TYPE)];
const arrayType_t &array = (arrayType_t&)value;
Buffer<CAPACITY>::pushArray<sizeof(TYPE)>(array);
}
};
int main()
{
BetterBuffer<10> buffer;
buffer.push(100);
return 0;
}
编译器输出以下错误消息。
main.cpp: In instantiation of ‘void BetterBuffer<CAPACITY>::push(TYPE) [with TYPE = int; long unsigned int CAPACITY = 10]’:
main.cpp:31:24: required from here
main.cpp:24:40: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘long unsigned int’ to binary ‘operator<’
Buffer<CAPACITY>::pushArray<sizeof(TYPE)>(array);
~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~
我用命令g++ -Wall -std=c++17 main.cpp
编译它。
我在版本中使用g ++:'g ++(Ubuntu 7.1.0-5ubuntu2~16.04)7.1.0'。
如果我从类Buffer
中删除模板参数或将方法push
从BetterBuffer
移到Buffer
,那么程序可以编译没有问题。
此特定代码有什么问题?