将POSIX :: open函数关联到命名空间

时间:2017-10-24 12:55:26

标签: c++ posix

我正在开发一个需要公开controller::open()函数的控件c ++库。但是在这个函数中我必须调用POSIX::open()函数来打开文件描述符。编译器抱怨我向控制器函数发送无效参数,并且不理解我想调用POSIX open()文件函数。

这是我的代码:

类声明:

class PosixReadController {  
int open();
}

实现:

#include <stdio.h>   /* Standard input/output definitions */
#include <string.h>  /* String function definitions */
#include <unistd.h>  /* UNIX standard function definitions */
#include <fcntl.h>   /* File control definitions */
#include <errno.h>   /* Error number definitions */
#include <termios.h> /* POSIX terminal control definitions */

int PosixReadController::open()
{
  int fd = open("/dev/ttyf1", O_RDWR | O_NOCTTY | O_NDELAY);
  if (fd == -1)
  {
   /*
    * Could not open the port.
    */

    perror("open_port: Unable to open /dev/ttyf1 - ");
  }
  else
    fcntl(fd, F_SETFL, 0);

return fd;
}

错误消息(eclipse):

  

无效参数:'候选人是:int open()'

使用::open将调用更改为打开到全局命名空间无济于事。因为我看到库已经包含open函数,我收到以下错误:

  

无效参数:'候选者是:int open(const char *,int,...)
  ImageCtrl * open(image)''

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

  

无效参数:&#39;候选人是:int open(char *,int,...)

这非常可疑。从哪里获得open的声明?您是否包含<fcntl.h>

原型应该看起来像这样:

int open(const char *, int, ...);

const char *会匹配您传递的字符串文字,但char *显然不会,因为字符串文字不可写。