不是全局命名空间的成员?

时间:2012-07-25 18:40:29

标签: c++ windows file-io

我有错误:

  

错误C2039:'read':不是'`global namespace''的成员   和   错误C2661:'Calc :: SymString :: read':没有重载函数需要3个参数   从行:    if(:: read(fd_sock,& size,4)!= 4)

这个错误和类似错误在我的代码中出现了很多。有谁知道是什么问题? 我正在使用Windows Visual Studio 2010,我正在从Unix迁移代码。 提前谢谢!

2 个答案:

答案 0 :(得分:3)

read()是unistd.h中定义的UNIX函数(在LINUX中) - 我读过的所有文档都表明它不是标准的C函数。这可能是它在UNIX中进行编译但在Windows中进行编译的原因。

在UNIX read()中获取文件描述符,但Windows中的等效构造是“句柄”。

您真的需要程序中的低级文件描述符I / O吗?你能使用fread,这是一个标准的C函数吗?

This Microsoft support article描述了Windows中可用的文件句柄类型:

There are multiple types of file handles that can be opened using 
the Win32 API and the C Run-time:

   Returned Type  File Creation API      API Set
   ---------------------------------------------
   HANDLE         CreateFile()           Win32
   HFILE          OpenFile()/_lcreat()   Win32
   int            _creat()/_open()       C Run-time
   FILE *         fopen()                C Run-time

答案 1 :(得分:1)

Microsoft在io.h中声明了Unix风格的I / O函数。

尝试包含该标题 - 您可能会收到一些关于使用弃用名称的警告(MS希望您使用名称_read())。如果是这样,您可能需要定义宏_POSIX_,它应该使这些警告静音。