我发现在C中运行的代码(虽然有警告)现在在移动到C ++时给我一个错误。我想知道为什么会产生错误,以及如何解决。
我正在将别人的代码转换为C ++,这给了我错误(拉出并在自己的文件中测试)......
#include <stdio.h>
typedef enum SPI_SSADDR_TYPE
{
SSADDR0 = 0,
SSADDR1 = 1,
SSADDR2,
SSADDR3,
SSADDR4,
SSADDR5,
SSADDR6,
SSADDR7,
SSADDR8
} SPI_SSADDR;
void SPI_set_slave_addr( SPI_SSADDR slaveSelectAddr );
int main()
{
SPI_set_slave_addr(SSADDR8);
return 0;
}
void SPI_set_slave_addr( SPI_SSADDR slaveSelectAddr )
{
slaveSelectAddr = slaveSelectAddr & (SPI_SSADDR)(0x07); // This line
printf("Test: %d\r\n", slaveSelectAddr);
return;
}
它产生的错误是:
TypeDef.cpp: In function ‘void SPI_set_slave_addr(SPI_SSADDR)’:
TypeDef.cpp:26: error: invalid conversion from ‘int’ to ‘SPI_SSADDR’
答案 0 :(得分:4)
在C ++中,与C不同,您不能将整数类型隐式转换为枚举类型。表达式的结果是整数类型,因为枚举在对它们执行算术时会转换为整数,因此必须显式转换回来:
slaveSelectAddr = static_cast<SPI_SSADDR>(slaveSelectAddr & 0x07);
答案 1 :(得分:1)
试试这个:
slaveSelectAddr = (SPI_SSADDR)((int)slaveSelectAddr & 0x07);
答案 2 :(得分:0)
尝试移动演员:
slaveSelectAddr = (SPI_SSADDR)(slaveSelectAddr & 0x07);
您还可以使用更多C ++版本的演员:
slaveSelectAddr = static_cast<SPI_SSADDR>(slaveSelectAddr & 0x07);
答案 3 :(得分:0)
slaveSelectAddr = static_cast<SPI_SSADDR>(static_cast<int>(slaveSelectAddr) & 0x07);