2017-02-19 1 views
1

Ich brauche deine HilfeFehler beim Setzen komplizierter Argumente in Min-Funktion? Warum? (Eclipse-C++)

if(s[i]==t) 
{ 
    //I get error for this 
    //aSP[pos] = min((dfs(i)+pow(i-pos,2)) , aSP[pos]); 

    //Then I replace the above code with the following codes, and then it worked 
    int a = (dfs(i)+pow(i-pos,2)); 
    int b = aSP[pos];    
    aSP[pos] = min(a,b); 
} 

Aber sie sind die gleichen richtig? Warum erhalte ich Fehler von Eclipse?
Es sagt

Beschreibung Ressourcenpfad Ortstyp Kandidaten 'Ungültige Argumente sind: const # 0 & min (konst # 0 &, Konst # 0 &)

Beschreibung Ressourcenpfad Standort Typ-Nr passende Funktion für Aufruf auf 'min (__ gnu_cxx :: __ promote_2 :: __ Typ, int &)' ColorfulRoad.h/colorfulroad-C++ Zeile 53 C/C++ Problem

und einige andere Informationen als auch, wie widersprüchlicher Typ für Parameter, Template-Argument Abzug/nicht bestanden Substitution ..

Antwort

2

Die Fehlermeldung bedeutet, dass in diesem Funktionsaufruf

aSP[pos] = min((dfs(i)+pow(i-pos,2)) , aSP[pos]); 

die ersten und die zweiten Argumente verschiedene Typen aufweisen. Daher kann der Compiler den Typ des Vorlagenparameters nicht ableiten.

Sie könnten dem Compiler helfen, das Template-Argument explizit anzugeben. Zum Beispiel

Im zweiten Aufruf der Funktion haben beide Argumente den Typ int. Also wird der Template-Parameter zu int abgeleitet.

1

Es ist leichter zu verstehen, wenn Sie stattdessen GCC Fehler hat:

error: no matching function for call to 'min(double, int)' 
    std::min(2.0, 3); 
        ^

Nur Wirf das erste Argument auf int.

Verwandte Themen