Was soll ich tun, wenn " mehr als eine Instanz von überladene Funktion "sqrt" entspricht dem argument-Liste"?
Bekomme ich einen Fehler in meinem code in der for-Schleife for ( j = 3; j <=sqrt(num); j +=2)
:
mehr als eine Instanz von überladene Funktion "sqrt" entspricht der argument-Liste.
Wie löse ich das?
# include <cmath>
//determine if number is prime
bool isPrime (long n)
{
int j, num = 0;
{
if (num <=1)
return false;
}
for ( j = 3; j <=sqrt(num); j +=2)
{
if (num % j == 0)
return false;
}
return true;
}
- Was sind Ihre
sqrt()
Funktionen? haben Sie übermäßig zu belasten? Was Kandidaten weiß der compiler zeigen Sie? int j, num = 0; { if (num <=1) return false; }
Würde dies nicht die UrsacheisPrime
den Wert false zurück, jedes mal?- In der Tat. Sobald das behoben ist, wird die folgende Schleife wird false zurückgegeben, für jede Zahl außer 2.
- Seymour, Guter Fang. Dass man spart ein bisschen Kopfschmerzen später.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen:
Was passiert ist, dass
<cmath>
enthält 3 unterschiedliche Definitionen von sqrt und der compiler nicht wissen, welche Sie verwenden möchten.std::sqrt
, und wahrscheinlichstatic_cast<float>(num)
.Haben Sie verpasst eine eckige Klammer in deinem code nach der zweiten Funktion
Sind Sie kompilieren mit -lm tag?
plus müssen Sie t typecast j als int.
Den Sie schreiben müssen, eine sinnvolle
sqrt
Funktion. Newton ' s Methode ist wahrscheinlich der einfachste Weg zu gehen. Auch, rufen Sie nicht diesqrt
Funktion jedes mal in der Schleife. Nenne es einfach mal.sqrt
Funktionen zur Verfügung. Warum hat diese person schreiben müssen, das ein anderes?