C++ 成员函数名称与标准 C 库不明确
c++ member function name ambiguous with standard c library
以下是我的示例代码
在成员函数中需要使用标准 C 库的exit()
终止foo()
进程,但它在编译时与成员函数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("exitn");
}
};
int main()
{
CFoo obj;
obj.foo();
}
将exit(0)
替换为 ::exit(0)
。这将强制它使用全局范围的 exit
版本。
与
保留函数发生命名冲突通常是不好的做法。
我建议将exit
重命名为析构函数。
您可以添加类名前缀以避免编译错误:CFoo::exit(void)
将stdlib.h
更改为cstdlib
并使用std::exit(0)
使用标准库函数。在 C++ 中使用 c 库时,请使用 C++ 标头(以 c 前缀开头的标头)而不是已弃用的".h"。
#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("exitn");
}
};
int main()
{
CFoo obj;
obj.foo();
}
相关文章:
- Visual C++(VS2017)中用户定义的转换不明确
- 重载类方法的不明确调用
- 为函数定义符号不明确的指针参数
- 父类的私有函数会导致对具有相同名称和相似参数的子类中的公共函数的不明确调用
- 在 C++17 中的命名空间和子命名空间中重载运算符是不明确的
- C++ 编译器错误:P1LinkedList.cpp:145:错误:重载的"to_string(int&)"调用不明确
- 对重载函数find_first_not_of的不明确调用
- 不明确的成员模板查找
- gcc出现不明确的模板实例化错误
- 调用'Node'构造函数是不明确的
- 如何解决不明确的运算符过载问题?
- 使用 nullptr 调用重载方法是不明确的
- "fpclassify":对重载函数的不明确调用
- 对"列表"的引用不明确,包括头文件
- 删除全局隐式函数 - 避免使用不明确的运算符
- 当接收到不明确的规范时,表示图的邻接列表的数据结构
- "byte":使用Crypto++和Windows SDK时出现不明确的符号错误
- C++标准是否明确允许/禁止实例化不完整类型的 std::函数?
- 为什么标准不允许 std::for_each 对无效的随机访问迭代器范围有明确定义的行为?
- C++ 成员函数名称与标准 C 库不明确