将c ++代码从unix移植到windows

Moj*_*sin 2 c++

嗨我必须将一些用c ++编写的东西从unix base os移植到windows visual studio 2008.下面的代码用void**实现数组数据类型 - 指向数据的指针.


struct array
{
    int id;
    void **array; // store the actual data of the array
    // more members
}
Run Code Online (Sandbox Code Playgroud)

当我在Unix上使用g ++编译时,没关系,但是当我尝试使用MSVS 2008时,我得到错误 - 错误C2461:'array':构造函数语法缺少形式参数.当我将成员从'array'更改为其他工作时,所以编译器认为成员名称'array'实际上是struct数组的构造函数.将结构命名为结构,显然不是一个好习惯,但它已经是这样编写的.我可以告诉MSVS编译器忽略此问题,或者我应该重命名与结构名称相同的所有成员.

AnT*_*AnT 5

您正在处理GCC编译器中的错误.C++语言明确禁止拥有名称与类名相同的数据成员(见9.2/13).MS编译器抱怨它是正确的.此外,在这种情况下,需要任何C++编译器来发出诊断消息.由于GCC即使在'-ansi -pedantic-Wall'模式下也是静默的,因此它是GCC中的明显错误.

Revison:我上面所说的只是在C++语言的"经典"C++ 98规范中才是正确的.在最新的规范中,此要求仅适用于该类的静态数据成员.现在,非静态数据成员可以与该类共享名称.我不知道这个改变是否已经在修订标准的官方版本中.

这意味着两个编译器都以自己的方式正确.MS编译器坚持使用该语言的"经典"C++ 98规范,而GCC似乎实现了更新的.