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

时间:2014-04-03 04:43:42

标签: 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 exit process
    }

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

int main()
{

    CFoo obj;

    obj.foo();
}

3 个答案:

答案 0 :(得分:6)

exit(0)替换为::exit(0)。这将强制它使用exit的全局范围版本。

答案 1 :(得分:0)

将命名与保留函数冲突通常是不好的做法。

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

您可以使用类名作为前缀,以避免编译错误:CFoo::exit(void)

答案 2 :(得分:0)

stdlib.h更改为cstdlib并使用std::exit(0)来使用标准库功能。 在C ++中使用c库时,使用C ++头文件(以c前缀开头)而不是&#34; .h&#34;不推荐使用。

#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();
}