【发布时间】:2019-09-29 20:25:54
【问题描述】:
我正在使用 mbed 开发一个嵌入式项目。芯片制造商使用此查找生成器指定循环冗余测试,但它是用 C 语言编写的。 查找生成器代码
///////////////////////configures CRC check lookup table////////////////////////
short pec15Table[256];
short CRC15_POLY = 0x4599; //CRC code
void configCRC(void)
{
for (int i = 0; i < 256; i++)
{
remainder = i << 7;
for (int bit = 8; bit > 0; --bit)
{
if (remainder & 0x4000)
{
remainder = ((remainder << 1));
remainder = (remainder ^ CRC15_POLY)
}
else
{
remainder = ((remainder << 1));
}
}
}
pec15Table[i] = remainder&0xFFFF;
};
我还不是很擅长 C++,所以我只是复制并粘贴了它并检查了明确的语法错误。例如,我用 short 和 unsigned short 切换了 int16 声明。但是,当我编译它给我以下错误。 这对我来说没有意义。我确定我做错了什么。
Error: Cannot determine which instance of overloaded function "remainder" is intended in "config.cpp", Line: 20, Col: 10
【问题讨论】:
-
奇怪的错误,但似乎缺少
remainder的声明。 -
如果
remainder与其他东西发生冲突,重命名它。 -
C++ 标准库中有一个std::remainder 函数。如果您的源代码中有
using namespace std;,请将其删除,这是一个坏习惯。 -
您没有声明变量余数,因此编译器假定“余数”是 C++ 标准库中的余数函数。使用“short”是不安全的,因为它只被定义为“至少 16 位”。使用 int16_t 或 uint16_t(顺便说一下,这也是标准的 C 类型)。
-
芯片厂商是谁?此代码由业余爱好者编写;您不能在生产质量软件中使用它。
标签: c++ algorithm programming-languages c embedded