我遇到的问题是在VS2005中编译C ++项目时出现C2440错误。该错误是由于我依赖的另一个项目中的一些现有C代码,它将一个void指针强制转换为char或int指针。
代码类似于:
void * bbb;
... // some code which defines the void pointer
int * aaa = bbb;
但是在C ++中我需要专门将类型转换为有效类型,如:
int * aaa = (int *)bbb;
我的问题是在VS2005中是否存在一个标志或编译选项,它允许我用C ++编译我的主项目,并忽略我想要编译为C的依赖项目的错误?
我宁愿不更改任何原始来源,因为它是一个共享项目。
答案 0 :(得分:2)
如果您将文件命名为“something.c”,编译器将[除非另有明确说明]将其编译为C
(因此很高兴接受您的指针转换而不使用强制转换)。名为“something.cpp”的文件将被编译为C ++,并且您需要使用强制转换将指针转换为其他类型,即使它是void
指针。
答案 1 :(得分:1)
执行此操作的唯一方法是编辑导致问题的头文件。事实证明,这是一些可以合并回共享项目的文件。
在VisualC ++中没有办法解决这个问题。我曾使用-fpermissive
来忽略gcc中的错误。
所以我刚刚将更新发布到:
int * aaa = (int *)bbb;