有沒有辦法讓這個編譯?編譯問題
並使其使用整數默認的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);
}
有沒有辦法讓這個編譯?編譯問題
並使其使用整數默認的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);
}
沒有,因爲一旦你添加默認值fct(int)
編譯器不能猜到你要調用哪一個:
fct(int)
與ARGfct()
你可以做的是刪除默認值,並調用fct(0)
或刪除完全沒有參數的一個。
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);
}
你不能重載功能由單獨的回報類型。讓我列舉下來了爲你的情況下生成的功能 int fct(int a = 0)
會產生兩個功能(一個說法,一個沒有): int fct(int a)
和int fct()
除了上述功能,你都推出了另一種方法 void fct()
所以你有兩個方法,返回類型不同 void fct()
和int fct()
在C++中,你CAN NOT重載函數與變化中的返回類型單獨
我建議你看看這個詞是什麼「曖昧」的意思。 – 2012-03-20 09:09:22
'int fct(int a = 0)'應該返回一個值 – triclosan 2012-03-20 09:10:49
不,沒有。 – trojanfoe 2012-03-20 09:12:03