Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
移植c++;从unix到windows的代码 我必须从C++ UNIX基础OS到Windows Visual Studio 2008中编写一些C++语言编写的东西。 以下代码使用void**-指向数据的指针实现数组数据类型 struct array { int id; void **array; // store the actual data of the array // more members }_C++ - Fatal编程技术网

移植c++;从unix到windows的代码 我必须从C++ UNIX基础OS到Windows Visual Studio 2008中编写一些C++语言编写的东西。 以下代码使用void**-指向数据的指针实现数组数据类型 struct array { int id; void **array; // store the actual data of the array // more members }

移植c++;从unix到windows的代码 我必须从C++ UNIX基础OS到Windows Visual Studio 2008中编写一些C++语言编写的东西。 以下代码使用void**-指向数据的指针实现数组数据类型 struct array { int id; void **array; // store the actual data of the array // more members },c++,C++,当我在Unix上使用g++进行编译时,这是正常的,但是当我尝试使用MSVS2008时,我得到了一个错误-错误C2461:“array”:构造函数语法缺少形式参数。当我将成员从“array”更改为其他名称时,它可以工作,因此编译器似乎认为成员名称“array”实际上是结构数组的构造函数。将成员命名为struct显然不是一个好的做法,但它已经这样写了。我可以告诉MSVS编译器忽略这个问题,或者我应该重命名与结构名相同的所有成员。我想说,如果您正在做一些您自己称为“不好的实践”的事情,那么您应该更改它

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

我想说,如果您正在做一些您自己称为“不好的实践”的事情,那么您应该更改它。

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

<>强>修订版<强>:以上所说的内容仅在C++经典语言C++ 98规范中是正确的。在最新的规范中,此要求仅适用于类的静态数据成员。非静态数据成员现在可以与类共享名称。不过,我不知道修订后的标准的官方版本中是否已经有了这一变化


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

我将重命名您的属性,使其与类的名称不同。这将使您的代码更易于移植。如果你必须在将来再移动到另一个编译器,那么你就不会再遇到这个问题了。< /P>你必须用VisualStudio的C++编译器编译吗?使用MINW编译Windows,您可以编译而不必更改代码。您是否尝试将其移植到托管C++?如果可行的话,我建议移植到非托管C++。如果是这样,那么他应该能够编译MinGW编译器,因为它是GCC的端口。我希望它有与GCC相同的行为(包括BGGY行为)。它在C++ 2003中(第9.2节/第13节)。段落13a增加了一个要求,如果类包含用户声明的Cor,非静态数据成员必须与类名不同。问题是,为UNIX编写的C++代码不从我这里写入,我的工作只是在Windows上移植它。