# cout-Fehler



## CodeCrafterCpp (22. April 2012)

Hallo,
Ich hab mal wieder Zeit gefunden ein bisschen zu Programmieren und habe jetzt folgenden Code zum testen.

```
#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:

```
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?


----------



## sheel (22. April 2012)

Hi

das hat mit der Liste wenig zu tun,
aber das cout kennt Vertex eben nicht.

Wenn du x/y/z getrennt ausgibst sollte es funktionieren.


----------



## CodeCrafterCpp (22. April 2012)

Wie gebe ich die denn getrennt aus? 
Wie trage ich eigentlich Werte ein wenn ich

```
*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?


----------



## Thomas Darimont (22. April 2012)

Hallo,

schau mal hier:

```
// 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:

```
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


----------



## CodeCrafterCpp (22. April 2012)

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:

```
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?


----------



## Thomas Darimont (22. April 2012)

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


----------



## CodeCrafterCpp (22. April 2012)

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


----------



## MCoder (23. April 2012)

Man könnte auch den ostream-Operator überladen:

```
#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


----------

