Domniemanie a przeładowanie

0

Przerabiam pewien kurs i mam takie pytanie, mam 2 funkcje, jedna z argumentem domniemanym, druga przeladowana z jednym argumentem. Jak teraz wywolac druga funkcje? I czy da sie wywolac w takim programie pierwsza funkcje tylko z jednym argumentem?

 #include <iostream>

using namespace std;

int fun(int, int = 4);  // pierwsza funkcja
int fun(int);            // druga funkcja

main()
{
    int c;

    cin>>c;
    cout<<fun(c);   // fun(c, 5) wywoluje pierwsza funkcje
}
int fun(int a, int b)
    {
        int w;
        return w=a+b;
    }
int fun(int e)
{
    int r;
    return r=e;
}
0
fun(10)
fun(10)

Kompilator nie ma pojęcia czy wywołujesz funkcję pierwszą czy drugą. Dopasowanie wywołania funkcji do jej sygnatury musi być jednoznaczne.

0

A kompilowałeś to w ogóle?

Kompilator jasno mówi, co go boli:

[quote]
== temp4, Debug ===

C:\Users\tomasz\Documents\projekty\temp4\main.cpp|8|warning: ISO C++ forbids declaration of 'main' with no type|
C:\Users\tomasz\Documents\projekty\temp4\main.cpp||In function 'int main()':|
C:\Users\tomasz\Documents\projekty\temp4\main.cpp|13|error: call of overloaded 'fun(int&)' is ambiguous|
C:\Users\tomasz\Documents\projekty\temp4\main.cpp|5|note: candidates are: int fun(int, int)|
C:\Users\tomasz\Documents\projekty\temp4\main.cpp|6|note: int fun(int)|
== Build finished: 1 errors, 1 warnings ===

[/quote]
call of overloaded fun(int&) is ambiguous - wywołanie przeciążonej funkcji fun(int&) jest niejednoznaczne

0

To ze nie dziala to wiem, ale chce wiedziec czy da sie jakos te funkcje wywolac, czy musze zmieniac funkcje.

0

Możesz wyrzucić ten "domyślny parametr" i zmienić go na normalny. C/C++ nie akceptuje fun(1, ); (czyli zostawiania przecinka bez parametru

1 użytkowników online, w tym zalogowanych: 0, gości: 1