Wie funktioniert das unter MS VisualC++?

Hallo!

Ich habe ein (für mich) sehr schönes Beispiel für die Nutzung von 'List’en (STL) gefunden: http://www.yolinux.com/TUTORIALS/LinuxTutorialC++STL…

Nur, das Beispiel stammt aus der Linux-Welt und ich arbeite momentan unter Windows. Daher meiner Frage:

Die Anweisung

class AAA 
{
 friend ostream &operator L;
 ...
 list::interator i;
 for (i=L.begin(); i!=L.end(); ++i) cout 

liefert beim Kompilieren der Operator '

Hi,

gibt mal das ganze (nicht funktionierende) Programm hier ein, inklusive aller includes.

Zumindestens

 list::interator i;

ist nicht korrekt, es könnten aber auch wichtige Headers fehlen.

Gruss
norsemanna

Hallo!

Der beschriebene Fehler ist leider nur ein Tippfehler.
Hier nochmal der gesamte Code (wie gesagt, original kopiert von http://www.yolinux.com/TUTORIALS/LinuxTutorialC++STL… )

// Standard Template Library example using a class.

#include 
#include 
using namespace std;

// The List STL template requires overloading operators =, == and x = rhs.x;
 this-\>y = rhs.y;
 this-\>z = rhs.z;
 return \*this;
}

int AAA::operator==(const AAA &rhs) const
{
 if( this-\>x != rhs.x) return 0;
 if( this-\>y != rhs.y) return 0;
 if( this-\>z != rhs.z) return 0;
 return 1;
}

// This function is required for built-in STL list functions like sort
int AAA::operatorx == rhs.x && this-\>y == rhs.y && this-\>z x == rhs.x && this-\>y x L;
 AAA Ablob ;

 Ablob.x=7;
 Ablob.y=2;
 Ablob.z=4.2355;
 L.push\_back(Ablob); // Insert a new element at the end

 Ablob.x=5;
 L.push\_back(Ablob); // Object passed by value. Uses default member-wise
 // copy constructor
 Ablob.z=3.2355;
 L.push\_back(Ablob); 

 Ablob.x=3;
 Ablob.y=7;
 Ablob.z=7.2355;
 L.push\_back(Ablob); 

 list::iterator i;

 for(i=L.begin(); i != L.end(); ++i) cout 

lg Andaron

funktioniert doch tadellos

ich glaub eher das du dir einfach mal VS-Express gedownloaded hast, copy paste, und fertig, aber sorry, visual studio hat projekte um schonmal das grundkonzept (Fenster) mitzuliefern, (alles läuft in einem fenster , auch dein code).

also als Konsolen 32 anwendung debugged mit unterem code, wo ich auch die einstiegsmarke main in t_main geändert habe . Und die „stdafx.h“ darf auch nicht fehlern, Visual studio braucht das so als einstiegspunkt damit überhaupt lauffähige ist, wir sind ja nichtmehr auf DOS und für windows braucht es etwas mehr :smile:

// konsole\_win32\_beispiel.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//

#include "stdafx.h"

#include 
#include 
using namespace std;

// The List STL template requires overloading operators =, == and x = rhs.x;
 this-\>y = rhs.y;
 this-\>z = rhs.z;
 return \*this;
}

int AAA::operator==(const AAA &rhs) const
{
 if( this-\>x != rhs.x) return 0;
 if( this-\>y != rhs.y) return 0;
 if( this-\>z != rhs.z) return 0;
 return 1;
}

// This function is required for built-in STL list functions like sort
int AAA::operatorx == rhs.x && this-\>y == rhs.y && this-\>z x == rhs.x && this-\>y x L;
 AAA Ablob ;

 Ablob.x=7;
 Ablob.y=2;
 Ablob.z=4.2355;
 L.push\_back(Ablob); // Insert a new element at the end

 Ablob.x=5;
 L.push\_back(Ablob); // Object passed by value. Uses default member-wise
 // copy constructor
 Ablob.z=3.2355;
 L.push\_back(Ablob); 

 Ablob.x=3;
 Ablob.y=7;
 Ablob.z=7.2355;
 L.push\_back(Ablob); 

 list::iterator i;

 for(i=L.begin(); i != L.end(); ++i) cout 

aber sorry, visual studio hat
projekte um schonmal das grundkonzept (Fenster) mitzuliefern,
(alles läuft in einem fenster , auch dein code).

Also das ist schon mal Blödsinn… wer kein Fenster braucht, bestellt keins (indem er ein Konsolenprojekt anlegt) und gut ist’s.

also als Konsolen 32 anwendung debugged mit unterem code, wo
ich auch die einstiegsmarke main in t_main geändert habe . Und
die „stdafx.h“ darf auch nicht fehlern, Visual studio braucht
das so als einstiegspunkt damit überhaupt lauffähige ist, wir
sind ja nichtmehr auf DOS und für windows braucht es etwas
mehr :smile:

So ein Quatsch mit Soße. _tmain ist ein #define-Hack, um - in den Projekteinstellungen umschaltbar - ein Unicode- oder ein Nichtunicode-Main haben zu können, mit anderen Worten ein main mit wchar_t**- oder ein main mit char**-Parameter

Man kann auch einfach int main(int, char**) schreiben und sich das Gehampel sparen.

Das historisch bedingt schwachsinnig benannte „stdafx.h“ ist nur notwendig, wenn man in seinem Projekt vorkompilierte Header nutzen möchte. Wer will das bei einem Tutorialprojekt ernsthaft? Leider sind vorkompilierte Header per default in VS-Projekten eingeschaltet, es ist aber alles andere als notwendig.

Grüße,
Sebastian

Ich habe ein (für mich) sehr schönes Beispiel für die Nutzung
von 'List’en (STL) gefunden:
http://www.yolinux.com/TUTORIALS/LinuxTutorialC++STL…

[…]

liefert beim Kompilieren der Operator ’

aber sorry, visual studio hat
projekte um schonmal das grundkonzept (Fenster) mitzuliefern,
(alles läuft in einem fenster , auch dein code).

Also das ist schon mal Blödsinn… wer kein Fenster braucht,
bestellt keins (indem er ein Konsolenprojekt anlegt) und gut
ist’s.

danke für die berechtigten diversen korrekturen, bzw das erklären was wofür ist .

Ich hab die ganzen schalter nie gefunden, die handbücher sind immer alle veraltet , supi , endlich mal ein paar grundlagen !

Sorry, aber ich verstehe von dem, was ihr da beschreibt leider fast nichts, da ich mich erst in MS-VC++ einarbeite. Das Grundkonzept von C habe ich bereits vor Jahren (bald Jahrzehnten) kennengelernt und OOP lerne ich gerade dazu. Aber die von euch beschriebenen Feinheiten sind mir weitgehend noch unbekannt. Deshalb versuche ich mich ja an solchen Tutorials.

Trotzdem vielen Dank für eure Tipps. Ich sehe mir solche Postings gerne an, da sie mich auf Ideen bringen, was sonst nicht in den „einfachen“ Tutorials steht.

Und was vieleicht hier noch wichtig ist: ich arbeite bis jetzt in Konsolen ohne Fenster. Die sind erst als nächstes drann…

lg
Andaron

Hallo!

Meine Version MS-VC++ 6.0 (schon etwas älter, aber dafür ein lizensierte Vollversion). Ich arbeite auf der Komandozeile (cmd.exe unter Windows). Und ein Projekt wird immer automatisch angelegt.

Sprich: Ich habe den Quellcode mit copy’n’paste rübergezogen, die Kompilierung gestartet, den Hinweis auf automatische Erzeugung eines Projektes abgenickt und über die Fehlermeldung gestaunt (mehrmals). Ich bin mir also keiner Schuld bewußt :wink:

lg
Andaron

Sorry, aber ich verstehe von dem, was ihr da beschreibt leider
fast nichts, da ich mich erst in MS-VC++ einarbeite. Das
Grundkonzept von C habe ich bereits vor Jahren (bald
Jahrzehnten) kennengelernt und OOP lerne ich gerade dazu. Aber
die von euch beschriebenen Feinheiten sind mir weitgehend noch
unbekannt. :

lass mal meine feinheiten da raus, er hat recht, ich hab unrecht, ganz einfach :smile:

Meine Version MS-VC++ 6.0 (schon etwas älter, aber dafür ein
lizensierte Vollversion).

Dann würde ich zunächst da das Problem vermuten. Compiler und Standardbibliothek in VC++ 6.0 sind recht alt und haben einige Fehler/Ungereimtheiten.

Man kann sich kostenlos die sogenannten „Express-Versionen“ neuerer Visual-Studio-Ausgaben herunter laden. Einfach nach Visual Studio Express googlen.

Oder du nimmst gleich einfach den gcc.

Viele Grüße,
Sebastian

Dann bräuchte ich ein paar Tutorials, wie ich mit dem gcc unter Windows ein „simples“ Grafikprogram (primär einfache Grafiken anzeigen) entwickeln kann. Hast Du da einen Tipp?

lg
Andaron