Verweis auf Funktion ist mehrdeutig [duplizieren]

7

Warum verursacht dies einen Compilerfehler, der besagt, dass meine Referenzen nicht eindeutig sind? Ich habe eine float , int und string , die alle separate Funktionssignaturen erstellen sollten, richtig?

Hier ist was ich bisher habe:

%Vor%     
MarJamRob 23.02.2013, 06:12
quelle

2 Antworten

15

Erstens, Verwenden Sie nicht using namespace std; . In diesem Fall gibt es eine Struktur namens std::plus - oh, warte, niemals Denken Sie daran, das heißt eigentlich plus und sein Konstruktor wird in den Bucket zur Überladungsauflösung mit Ihrer Funktion namens plus geworfen.

Zweitens haben Sie eine Mehrdeutigkeit, weil 3.2 und 4.2 vom Typ double sind und genauso gut in float oder int konvertiert werden können.

Dies ist eine Vereinfachung, aber wenn es darum geht, Zahlen an eine überladene Funktion zu übergeben, verwendet C ++ grundsätzlich diese Regeln:

  1. Wenn alle Argumente genau mit einer der Überladungen übereinstimmen, dann verwenden Sie diese.
  2. Wenn alle Argumente so befördert werden können, dass sie mit einer der Überladungen übereinstimmen, dann verwenden Sie diese.
  3. Wenn alle Argumente numerisch konvertiert werden können, um mit einer der Überladungen übereinzustimmen, dann verwenden Sie diese.

Wenn Sie mehrere Kandidaten auf einer bestimmten Ebene haben, ist das eine Mehrdeutigkeit. Entscheidend ist, dass ein double nicht zu einem float hochlädt - das wäre ein Downgrade. Daher muss eine Standardkonvertierung in float verwendet werden, die mit der Standardkonvertierung in int verknüpft ist, sodass diese beiden Überladungen nicht eindeutig sind.

    
John Calsbeek 23.02.2013, 06:20
quelle
4

Rufen Sie die Float-Überladung wie folgt auf:

%Vor%

Eine Konstante wie 3.2 hat tatsächlich den Typ double .

    
user1610015 23.02.2013 06:15
quelle