我在标头文件(代码已删除)中定义了以下模板函数:
class Payload
{
public:
template<typename RetType>
RetType getPayloadValue(size_t startByte, size_t stopByte) const
{
RetType theResult;
std::memcpy(&theResult,&mBuffer[startByte],stopByte-startByte);
return theResult;
}
private:
uint8_t mBuffer[8];
};
在以下情况下发生错误:
getPayloadValue<CAN::DevType>(startByte, stopByte);
一个编译器抱怨mBuffer
:无效使用了非静态数据成员,
但是对于其他编译器来说很好。下面的代码直接来自编译器,当试图解析上面的代码时,编译器抱怨错误发生在这里:
template< class RetType>
RetType TSCP::CANPayload::SBF_getPayloadValue_1< RetType> ::stub(::size_t StartByte, ::size_t stopByte)
{
RetType theResult;
std::memset(&theResult, 0, sizeof(theResult));
std::memcpy(&theResult, &(mBuffer[startByte]), stopByte - startByte); (
return theResult;
}
更详细的错误消息:
CANMsgRxAlloc_inst.cpp:34031:198: error: invalid use of non-static data member TSCP::CANPayload::mBuffer
CANMsgRxAlloc_inst.cpp:33059:52: note: declared here
uint8_t mBuffer[8];
^