Ergebnis 1 bis 4 von 4

Thema: [C++] Struct aktualisiert sich nur nach cout

  1. #1
    Shogun Avatar von DarkSyranus
    Registriert seit
    28.03.2006
    Ort
    ::1/128
    Alter
    25
    Beiträge
    3.446
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings
    Blog-Einträge
    1

    Standard [C++] Struct aktualisiert sich nur nach cout

    Moin.
    Ich stehe wiedereinmal vor einem abstrakten Rätsel.
    Ich habe ein eigenes Struct.
    Code:
    		struct tPosition
    		{
    			short Color;
    			short X;
    			short Y;
    		};
    In einer anderen Funktion benutze ich nun dieses Struct um einen Wert zu berechnen.
    Code:
    	/**
    	* This function checks if a move is valid.
    	*/
    	bool cField::IsValidMove(tMove Move)
    	{
    		tPosition Position;
    
    		cout << " >> Is valid move ..." << endl;
    
    		// check if the stones are within the field and free
    		if&#40;!this->IsEmptyField&#40;Move.First&#41; || !this->IsEmptyField&#40;Move.Second&#41;&#41;
    		&#123;
    			return false;
    		&#125;
    
    		// check if the stones halfes are next to each other
    		for&#40;short i = 0; i < 6; i ++&#41;
    		&#123;
    			// get position of next neighbour stone
    			Position = this->GetNextStoneInDirection&#40;Move.First, i&#41;;
    
    			// DAS IST DIE BOESE ZEILE
    			cout << "Position X&#58; " << Position.X << "  Y&#58; " << Position.Y << endl;
    
    			// check positions
    			if&#40;&#40;Move.Second.X == Position.X&#41; && &#40;Move.Second.Y == Position.Y&#41;&#41;
    			&#123;
    				cout << "Stone found" << endl;
    
    				break;
    			&#125;
    
    			// not located next to each other
    			if&#40;i == 5&#41;
    			&#123;
    				return false;
    			&#125;
    		&#125;
    
    		cout << "Valid move" << endl;
    
    		return true;
    	&#125;
    Das funktioniert auch soweit, aber nur, solange die Zeile nach // DAS IST DIE BOESE ZEILE im Code vorhanden ist.
    Wenn ich den cout Befehl rausnehme, ist die Überprüfung immer false.

    Der Fehler ist für mich völlig unverständlich ...
    Hat da Jemand eine Idee, ob es auch ohne die cout Zeile geht?
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    der/die Göttliche Avatar von jojo87
    Registriert seit
    23.03.2007
    Ort
    Leipzig
    Alter
    30
    Beiträge
    3.131
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Bin jetzt kein Held c++ Held, aber wird hier
    Code:
    Position = this->GetNextStoneInDirection&#40;Move.First, i&#41;;
    ein ungültiger Wert für Position vergeben?

    Vielleicht zeigst du mal die Funktion?

    Gruß,
    Jojo

  3. #3
    Shogun
    Themenstarter
    Avatar von DarkSyranus
    Registriert seit
    28.03.2006
    Ort
    ::1/128
    Alter
    25
    Beiträge
    3.446
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings
    Blog-Einträge
    1

    Standard

    Code:
    	/**
    	* This function returns the next stone in direction.
    	*/
    	tPosition cField&#58;&#58;GetNextStoneInDirection&#40;tPosition Position, short Direction&#41;
    	&#123;
    		cout << " >> Get next stone in direction ..." << endl;
    
    		// check if it is a valid field
    		if&#40;this->IsValidField&#40;this->Field&#91;Position.Y +this->Directions&#91;Direction&#93;.Y&#93;&#91;Position.X +this->Directions&#91;Direction&#93;.X&#93;&#41;&#41;
    		&#123;
    			return this->Field&#91;Position.Y +this->Directions&#91;Direction&#93;.Y&#93;&#91;Position.X +this->Directions&#91;Direction&#93;.X&#93;;
    		&#125;
    
    		return this->Field&#91;0&#93;&#91;0&#93;;
    	&#125;
    Daran kann es aber eigentlich nicht liegen, da das Problem nur besteht, wenn man kein cout benutzt.

    Edit: Habs hinbekommen, GetNextStoneInDirection brauchte noch einen & davor, fragt mich aber bitte nicht warum.
    Falls jemand das eklären kann, würde ich es gerne wissen.

  4. #4
    Forum Guru Avatar von The User
    Registriert seit
    28.10.2007
    Ort
    Zwischen Pazifik und Atlantik...
    Beiträge
    4.044
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    du meinst tposition& cField::GetNextStoneInDirection ?
    Dadurch verweist die Rückgabe auf den in der Funktion ausgewählten Stein, sie ist keine Kopie.
    Dann nehme ich an, dass der Zuweisungsoperator operator= vom Compiler für tPosition falsch automatisch definiert wurde.
    Wenn du es ohne & haben möchtest, probier mal in der Klasse tPosition den operator= neu zu definieren, daran könnte es liegen.
    Einfach:
    Code:
    tPosition& tPosition&#58;&#58;operator=&#40;tPosition arg&#41;
    &#123;
    Color = arg.Color;
    X = arg.X;
    Y = arg.Y;
    return *this;
    &#125;
    Nicht sicher, dass es daran liegt.

    Viele liebe Grüße
    The User

Ähnliche Themen

  1. Auswahlbuttons => je nach Komination verändern sich Inhal
    Von -TS-design im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 8
    Letzter Beitrag: 18.05.2007, 20:48
  2. Warum ändert sich meine HP je nach Browser?!?!
    Von Robkill im Forum HTML & CSS Forum
    Antworten: 10
    Letzter Beitrag: 11.05.2007, 18:26
  3. ICQ loggt sich automatisch nach 15min aus
    Von chris90night im Forum Computer - Internet Forum
    Antworten: 7
    Letzter Beitrag: 25.04.2007, 02:10
  4. Webseite aktualisiert sich nicht automatisch
    Von Maik23 im Forum HTML & CSS Forum
    Antworten: 2
    Letzter Beitrag: 07.10.2005, 11:24
  5. STARTSEITE VERÄNDERT SICH NACH INSTALLIERTEM PROGRAMM
    Von Method-MaN im Forum Computer - Internet Forum
    Antworten: 7
    Letzter Beitrag: 11.09.2004, 00:22

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •