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库函数放在全局名称空间中,尽管编译器倾向于这样做是出于实用的考虑。