Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.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++ c++;成员函数名与标准c库不明确_C++_C - Fatal编程技术网

C++ c++;成员函数名与标准c库不明确

C++ c++;成员函数名与标准c库不明确,c++,c,C++,C,下面是我的示例代码 在成员函数foo()中,需要使用标准c库的exit()来终止 进程,但它在编译时与成员函数int CFoo::exit(void)有不明确的命名错误 无论如何都可以避免这个问题吗 #include <stdlib.h> #include <stdio.h> class CFoo { public: void foo(void) { exit(0); // needs to use standard libc to

下面是我的示例代码

在成员函数
foo()
中,需要使用标准c库的
exit()
来终止 进程,但它在编译时与成员函数
int CFoo::exit(void)
有不明确的命名错误

无论如何都可以避免这个问题吗

#include <stdlib.h>
#include <stdio.h>

class CFoo
{

public:

    void foo(void)
    {
        exit(0); // needs to use standard libc to exit process
    }

    void exit(void)
    {
        printf("exit\n");
    }
};

int main()
{

    CFoo obj;

    obj.foo();
}
#包括
#包括
类CFoo
{
公众:
无效foo(无效)
{
退出(0);//需要使用标准libc退出进程
}
无效退出(无效)
{
printf(“退出”);
}
};
int main()
{
CFoo obj;
obj.foo();
}

退出(0)
替换为
::退出(0)
。这将迫使它使用全局范围的
exit

版本。与保留函数发生命名冲突通常是不好的做法

我建议将
exit
重命名为析构函数


您可以使用类名作为前缀以避免编译错误:
CFoo::exit(void)
stdlib.h
更改为
cstdlib
,并使用
std::exit(0)
使用标准库函数。 在C++中使用C库时,使用C++头(以C前缀开头)代替“不”。
#include <cstdlib>
#include <cstdio>

class CFoo
{

    public:

   void foo(void)
   {
       std::exit(0); // needs to use standard libc to exit process
   }

   void exit(void)
   {
       printf("exit\n");
   }
};

int main()
{

   CFoo obj;
   obj.foo();
}
#包括
#包括
类CFoo
{
公众:
无效foo(无效)
{
std::exit(0);//需要使用标准libc退出进程
}
无效退出(无效)
{
printf(“退出”);
}
};
int main()
{
CFoo obj;
obj.foo();
}
或包含
并使用
std::exit
。我不确定是否可以保证将C库函数放在全局名称空间中,尽管编译器倾向于这样做是出于实用的考虑。