繁体   English   中英

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

[英]Porting c++ code from unix to windows

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


struct array
{
    int id;
    void **array; // store the actual data of the array
    // more members
}

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

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

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

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

我会说,如果你做的事情你自己形容为“不是一个好习惯”,那么你应该改变它。

我会将您的属性重命名为与该类名称不同。 这将使您的代码更具可移植性。 如果您将来必须转移到另一个编译器,那么您将不会再次遇到此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM