使用现有C源时的C ++错误C2440

时间:2013-02-25 00:19:58

标签: c++ c visual-studio

我遇到的问题是在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的依赖项目的错误?

我宁愿不更改任何原始来源,因为它是一个共享项目。

2 个答案:

答案 0 :(得分:2)

如果您将文件命名为“something.c”,编译器将[除非另有明确说明]将其编译为C(因此很高兴接受您的指针转换而不使用强制转换)。名为“something.cpp”的文件将被编译为C ++,并且您需要使用强制转换将指针转换为其他类型,即使它是void指针。

答案 1 :(得分:1)

执行此操作的唯一方法是编辑导致问题的头文件。事实证明,这是一些可以合并回共享项目的文件。

在VisualC ++中没有办法解决这个问题。我曾使用-fpermissive来忽略gcc中的错误。

所以我刚刚将更新发布到:

int * aaa = (int *)bbb;