我有一个班级,
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);
然后没有错误,但我需要更改开发的内容。
答案 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太短的情况下返回正确长度的错误。