2012-03-20 185 views
0

有没有办法让这个编译?编译问题

并使其使用整数默认的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); 
} 
+6

我建议你看看这个词是什么“暧昧”的意思。 – 2012-03-20 09:09:22

+1

'int fct(int a = 0)'应该返回一个值 – triclosan 2012-03-20 09:10:49

+1

不,没有。 – trojanfoe 2012-03-20 09:12:03

回答

6

没有,因为一旦你添加默认值fct(int)编译器不能猜到你要调用哪一个:

  • fct(int)与ARG
  • fct()
的默认值

你可以做的是删除默认值,并调用fct(0)或删除完全没有参数的一个。

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); 
    } 
0

你不能重载功能由单独的回报类型。让我列举下来了为你的情况下生成的功能 int fct(int a = 0) 会产生两个功能(一个说法,一个没有): int fct(int a)int fct() 除了上述功能,你都推出了另一种方法 void fct() 所以你有两个方法,返回类型不同 void fct()int fct() 在C++中,你CAN NOT重载函数与变化中的返回类型单独