cout-Fehler

CodeCrafterCpp

Erfahrenes Mitglied
Hallo,
Ich hab mal wieder Zeit gefunden ein bisschen zu Programmieren und habe jetzt folgenden Code zum testen.
C++:
#include <list>
#include <iostream>

using namespace std;

int main()
{
	struct Vertex
	{
		float x, y, z;
	};
	list <Vertex> mylist(5,0);
	list <Vertex>::iterator it = mylist.begin();
	advance(it, 2);
	cout << *it ;

	cin.get();
	return 0;
}

Geht das überhaupt mit den struct? Ich bekomme Folgenden Fehler:
Code:
	2	IntelliSense: Kein "<<"-Operator stimmt mit diesen Operanden überein.	c:\users\jonas\documents\visual studio 2010\projects\listen\listen\main.cpp	17
Fehler	1	error C2679: Binärer Operator '<<': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'main::Vertex' akzeptiert (oder keine geeignete Konvertierung möglich)	c:\users\jonas\documents\visual studio 2010\projects\listen\listen\main.cpp	17

Also was tun?
 
Zuletzt bearbeitet von einem Moderator:
Wie gebe ich die denn getrennt aus?
Wie trage ich eigentlich Werte ein wenn ich
C++:
*it = 1.2,1.2,1.2;
mache bekomme ich auch Fehler...

Und noch eine Frage die gar nichts mit der eigentlichen zu tun hat. Ich nutze ja VS2010 Express wie schaffe ich es wenn ich einen Code hab ihn einzurücken. Also das er ein Tab eingerückt wird?
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

schau mal hier:
C++:
// IteratorExample.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
#include <list>
#include <iostream>
#include <sstream>

using namespace std;

struct Vertex
{
	float x, y, z;

	string ToString(){
		ostringstream out;
		out << "x: ";
		out << x;
		out << ", y: ";
		out << y;
		out << ", z: ";
		out << z;
		return out.str();
	}
};

int main(int argc, char* argv[])
{
	list<Vertex> vertices;


	for(int i = 0; i < 10; i++){
		Vertex v = {1.0f * i,2.0f* i,3.0f* i};
		vertices.push_back(v);
	}
	
	list<Vertex>::iterator it = vertices.begin();
	advance(it, 2);

	cout << "It ->" << it->ToString() << endl;

	return 0;
}
Ausgabe:
Code:
It ->x: 2, y: 4, z: 6

Und noch eine Frage die gar nichts mit der eigentlichen zu tun hat. Ich nutze ja VS2010 Express wie schaffe ich es wenn ich einen Code hab ihn einzurücken. Also das er ein Tab eingerückt wird?
Code markieren dann Strg drücken (halten) dann K und dann F drücken

... oder im Menü via Bearbeiten -> Erweitert ->Auswahl formatieren

Gruß Tom
 
Bei gibt es unter Bearbeiten kein Erweitert. Und wenn ich den Text markiere und Strg K bzw. Strg F drücke passiert nicht das erwartete.


Bekomme folgenden Fehler:
Code:
Fehler	1	error LNK1168: "C:\Users\Jonas\Documents\Visual Studio 2010\Projects\Listen\Debug\Listen.exe" kann nicht zum Schreiben geöffnet werden.	C:\Users\Jonas\Documents\Visual Studio 2010\Projects\Listen\Listen\LINK

Wenn ich die Exe lösche geht es aber dazu habe ich ja auch keine lust jedes mal zu löschen wie behebe ich den Fehler?
 
Zuletzt bearbeitet:
Hallo,

läuft dein Programm noch? Solange das Programm läuft kann es nicht gelöscht werden... (und auch nicht neu erstellt werden...)

Gruß Tom
 
Nein das Programm ist aus. Wenn es noch laufen würde würde ich es glaub ich auch nicht löschen können und Tastmanager zeigt auch nichts an.

Auch und das mit den Text Formatieren hat sich geklärt hab nicht richtig gelesen :D
 
Zuletzt bearbeitet:
Man könnte auch den ostream-Operator überladen:
C++:
#include <list>
#include <iostream>

typedef struct 
{
    float x, y, z;
} Vertex;

std::ostream& operator<<(std::ostream &stream, const Vertex& s)
{
  stream << s.x << "; " << s.y << "; " << s.z;
  return stream;
}

int main()
{
    Vertex s = { 1.0f, 2.0f, 3.0f };
    
    std::list<Vertex> mylist( 5, s );
    std::list<Vertex>::iterator it = mylist.begin();
    advance(it, 2);
    
    std::cout << *it << std::endl;
   
    return 0;    
}
Gruß
MCoder
 

Neue Beiträge

Zurück