MinGW(g++) komische compilerfehler

also warscheinlich werd ich jetzt 1000 mal als noob beleidigt, abe ich komm nicht weiter.

ich habe MinGW installiert, da g++ immer noch der beste compiler ist(denk ich)

so jetzt habe ich zum test etwas ganz einfaches geschrieben, ein template un dein for


source:

#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
template <class T> bool vergleich(T a, T b)
{
return(a<b);
}
if(vergleich(2,5)){cout << "1";}
if(vergleich(2.4,2.5)){cout << "1";}
system("pause>nul");
return 0;
}


folgende fehler:

expected primary expression before "template"
expected ";" before "template"

das gleiche passiert bei for auch

ich weiß nicht warum o_O formulierung ist richtig wenn ich das richtig sehe
 
müsste es nicht

template <class T> bool vergleich(T a, T b); heissen`?
 
@SilentBob: Nein es ist ja eine definition
@LionC: anstatt bool musst du T schreiben.
außerdem müsste bei der return anweisung das stehen:
Code:
return a < b ? true  : false
wenn a oder b zurückgegeben wird und es != 0 wird die if anweisung immer mit true ausgewertet.
 
bad alloc ist diese formulierung nicht die für makos? und soweit ich weiß kann man auch bei templates enen festen rückgabetyp festlegen.


außerdem kommt bei:

for(int i = 0, i<5, i++)
{
cout << i << endl;
}

die gleriche fehlermeldung, nur dass "tempate" halt durch "for ersetzt wird
 
Original von LionC
source:

#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
template <class T> bool vergleich(T a, T b)
{
return(a<b);
}
if(vergleich(2,5)){cout << "1";}
if(vergleich(2.4,2.5)){cout << "1";}
system("pause>nul");
return 0;
}

wieso definierst du die Template-Funktion IN der Main?
Das macht für mich gerade irgendwie überhaupt keinen Sinn...

versuch's mal so:
Code:
#include <iostream>
#include <cstdlib>
using namespace std;

template <class T> bool vergleich(T a, T b)
{
    return(a<b);
}

int main()
{
    if(vergleich(2,5)){cout << "1";}
    if(vergleich(2.4,2.5)){cout << "1";}
    system("pause>nul");
    return 0;
}
 
nein das ist einfach eine verkürzte schreibweise für if-else
was bei der for - schleife falsch sein soll ist mir schleierhaft, da wird das template ja garnicht verwendet.

also müsste der code so aussehen:
Code:
#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
      template <bool> T vergleich(T a, T b)
     {
            return(a<b);
     }
    if(vergleich(2,5)){cout << "1";}
    if(vergleich(2.4,2.5)){cout << "1";}
    cin.get(); //gegen system()!
    return 0;
}

EDIT: zu spät X(
aber bevisbee hat recht, hab das auch nicht bemerkt :rolleyes:
 
Zurück
Oben