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

c++ member function name ambiguous with standard c library

本文关键字:标准 不明确 成员 函数 C++      更新时间:2023-10-16

以下是我的示例代码

在成员函数中需要使用标准 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();
}