2012-03-20 153 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重載函數與變化中的返回類型單獨