2012-03-20 19 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

だけで戻り値の型の変化に機能を過負荷にすることはできません私はあなたが何語「あいまいな」手段を見てください。 –

+1

'int fct(int a = 0)'は値 – triclosan

+1

を返さなければなりません。 – trojanfoe

答えて

6

いいえ、あなたはfct(int)コンパイラにデフォルト値を追加したら、あなたが呼び出したいどれを推測することはできませんので:

  • fct(int)引数
  • 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) のために生成される関数は2つの機能(引数で1、なしの1)が生成されますダウンリストしてみましょう:あなたは別の方法 void fct() を導入している上記の機能に加えて int fct(int a)int fct() をだから、あなたは2を持っています戻り値の型C++で void fct()int fct() によって異なった方法では、あなた