编译问题

时间:2012-03-20 09:07:46

标签: c++

有没有办法进行编译?

并使它使用带有整数默认值的fct?

使用g ++。

#include <stdio.h>

int     fct(int a = 0)
{
        printf("a: %d\n", a);
        return (0);
}

void    fct()
{
}



int     main(void)
{

        fct();
        return (0);
}

3 个答案:

答案 0 :(得分:6)

不,因为一旦你向fct(int)添加了默认值,编译器无法猜出你要调用哪一个:

  • fct(int),默认值为arg
  • fct()

您可以做的是删除默认值,然后调用fct(0)或完全删除没有参数的那个。

答案 1 :(得分:1)

C ++不会让你编译不明确的代码。如果代码中存在歧义,则必须尝试解决它。

函数不能重载,仅在返回类型上有所不同。

查看此链接以获取示例。 http://xania.org/200711/ambiguous-overloading

以下内容仅适用:

 #include <stdio.h>

    int     fct(int a)
    {
            printf("a: %d\n", a);
            return (0);
    }

    void    fct()
    {
        printf("a: 0\n", a);
    }



    int     main(void)
    {

            fct();
            return (0);
    }

答案 2 :(得分:0)

您不能仅通过返回类型重载函数。让我列出为您的案例生成的函数     int fct(int a = 0) 将生成两个函数(一个带参数,一个没有):     int fct(int a)int fct() 除了上述功能,您还引入了另一种方法     void fct() 所以你有两种方法,不同的是返回类型     void fct()int fct() 在C ++中, CAN NOT 仅使用返回类型的变体重载函数