C ++:初始化'int Agent :: tun_alloc(char *,int)'的参数1 [-fpermissive]

时间:2015-11-10 20:13:48

标签: c++

我有一个班级,

    class Agent{

    private:
       ....
       ....
       int tun_alloc(char *dev, int flags);

    public:
       ....
       ....
    }



    int Agent::tun_alloc(char *dev, const int flags) {

      struct ifreq ifr;
      int fd, err;
      char clonedev[] = "/dev/net/tun";

      if( (fd = open(clonedev , O_RDWR)) < 0 ) {
        perror("Opening /dev/net/tun");
        exit(1);
      }

      memset(&ifr, 0, sizeof(ifr));

      ifr.ifr_flags = flags;

      if (*dev) {
        strncpy(ifr.ifr_name, dev, IFNAMSIZ);
      }

      if( (err = ioctl(fd, TUNSETIFF, (void *)&ifr)) < 0 ) {
        perror("ioctl(TUNSETIFF)");
        close(fd);
        exit(1);
      }

      strcpy(dev, ifr.ifr_name);

      return fd;
    }

当我在eclipse上构建项目时,我总是得到initializing argument 1 of ‘int Agent::tun_alloc(char*, int)’ [-fpermissive]的错误int tun_alloc(char *dev, int flags);,有什么潜在的问题?

如果我添加const

     int tun_alloc(const char *dev, int flags);

然后没有错误,但我需要更改开发的内容。

1 个答案:

答案 0 :(得分:0)

您没有提供完整的错误以及代码如何实际调用您的函数,但是当您向const char*参数提供char*时可能会出现此类错误,即:

std::string s;
tun_alloc(s.c_str(),0); 

c_str()会返回const char*,因此您需要:

int tun_alloc(const char *dev, int flags);
              ^^^^^ ~~~ !!

[编辑]

  

但我需要更改开发的内容。

看到完整的源代码后,我会用std :: string&amp;替换char dev。开发。现在,您将能够将字符串传递给函数并从函数返回字符串。如果你想继续使用char 那么你必须将dev的长度传递给tun_alloc并在ITS太短的情况下返回正确长度的错误。