URL: https://www.overclockers.at/coding-stuff/c-function-overload-ambiguous_245472/page_1 - zur Vollversion wechseln!
Grüß euch
Kann mir jemand erklären wieso folgendes Beispiel vom GCC (GNU ARM 5.2) als "ambiguous" gehandelt wird?
Code: CPPfoo(int a, int b); foo(int a, int b, bool c); void foo(int a, int b) { } void foo(int a, int b, bool c) { } foo(1, 2, true); // no errors foo(1, 2); // ambiguous
Foot im Prototypen?
Err... der Fuß is natürlich nicht dort.
/edit
Interessanterweise schreit a jetzt bei exakt dem Beispiel nicht...
Ich hab aber 2x Funktionen die _genau_ so ausschaun und da mag a mich nicht. Außerdem is der "Error" wohl eher ein Warning, weil er beim Debuggen die zwei Aufrufe sehr wohl richtig auflösen kann. Das gibts ja nicht?
Ambiguous sind eher Operatorueberladungen bzw. die Casts der Operanden, ich glaub also nicht, dass es an den Funktionen bzw. deren Prototypen liegt. Du muesstest uns den ganzen Code zeigen..
Zitat von ObermotzAmbiguous sind eher Operatorueberladungen bzw. die Casts der Operanden, ich glaub also nicht, dass es an den Funktionen bzw. deren Prototypen liegt. Du muesstest uns den ganzen Code zeigen..
Code: CPPvoid llHsmIssueChannel(Sample* sample, double vol, double r, bool loop) { llhsm.issueChannel(sample, vol, r, loop); } void llHsmIssueChannel(Sample* sample, double vol, double r) { llhsm.issueChannel(sample, vol, r, sample->can_loop); }
Mir fällt auf, im Funktionsprototyp fehlt der Typ des Rückgabewertes. Meine Gcc-Version (4.9) mag das gar nicht:
Code: CPP[b]void[/b] foo(int a, int b); [b]void[/b] foo(int a, int b, bool c);
Sry, die hatte ich in meinem Beispiel natürlich auch drin!
Jaja, C++ aktueller GNU ARM. Ich verwend im selben File ziemlich heavy templates und das funktioniert alles wunderbar. Hät nicht gedacht dass sich das für kleinste Embedded Anwendungen (ich hab 96k RAM ) schon derart nutzen lässt.
Wie gesagt, bei dem Anfangs geposteten Beispiel schreit er eh nicht auf, nur bei meinem Code direkt. Und auch da is es irgendwie komisch, da ich den debuggen kann...
Beide Aufrufe:
Code: CPPllHsmIssueChannel(&sample[0], 1.0, 1.0); llHsmIssueChannel(&sample[1], 1.0, 1.0, true);
Ich weiss nicht, wies bei C++ aussieht, aber ich bin nicht sicher, ob du das Array vor der Uebergabe ueberhaupt dereferenzieren musst und du koenntest deine 1.0 Literale mit f oder d annotieren..
Zitat von ObermotzIch weiss nicht, wies bei C++ aussieht, aber ich bin nicht sicher, ob du das Array vor der Uebergabe ueberhaupt dereferenzieren musst und du koenntest deine 1.0 Literale mit f oder d annotieren..
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025