JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=31ec85badcc6582ad2bd41809327f4fbMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

operator() behält nix im vektor
Gehe zu Seite 1, 2, 3, 4  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Mazze
JLI'ler


Alter: 39
Anmeldedatum: 02.01.2004
Beiträge: 145

Medaillen: Keine

BeitragVerfasst am: 09.03.2004, 20:16    Titel: operator() behält nix im vektor Antworten mit Zitat

Moin,

also ich hab ein recht Merkwürdiges Problem, vermutlich produziert aus eigener Dummheit oder Unwissenheit: Wink

Ich habe einen std::string, welchen ich mit
Code:
 
for_each(stringName.being(),stringName.end(),lex);

Zeichen weise durchlaufe.
'lex' ist die Instanz der Klasse Lexer, welche zum einen einen std::vector<std:.string> als private-Member und den void operator() (char ch) besitzt.

In operator() wird der Parameter ch nun ein bisschen bearbeitet (wie spielt eigentlich keine roll, habs auf mehrer Arten versucht) und anschließend auf den vector gepusht (vohrer wurde er natürlich noch in den string gepackt)

das lustige an der sache ist jetzt allerdings:
wenn ich mir den inhalt des vectors nach der Ausführung der for_each Funktion ansehe ist dieser...leer (es sei denn er ist static)
Durch laufe ich ihn innerhalb von operator() .. ist das drinn, was drinn seine soll...

Wei jemand zufällig warum? Schön und ugt das es mit static geht, aber ich würd doch gerne drauf verzichten.. Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 09.03.2004, 20:30    Titel: Antworten mit Zitat

Ist lex wirklich ein Objekt der Klasse oder der Klassenname selber?

C.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Mazze
JLI'ler


Alter: 39
Anmeldedatum: 02.01.2004
Beiträge: 145

Medaillen: Keine

BeitragVerfasst am: 09.03.2004, 20:32    Titel: Antworten mit Zitat

lex ist ein Objekt (Lexer ist der Klassenname)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 09.03.2004, 21:03    Titel: Antworten mit Zitat

Okay, hier ist er ;)

Code:

#include<iostream>
#include<string>
#include<algorithm>

using namespace std;

struct lexer
{
   operator()(char& c)
   {
      c = '*';
   }
};

int main()
{
   string foo = "Hallo";

   cout << foo << endl;
   for_each(foo.begin(), foo.end(), lexer());
   cout << foo << endl;

   return 0;
}


Wahrscheinlich lag es daran, dass du 'n' by Value übergeben hast.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 09.03.2004, 21:04    Titel: Antworten mit Zitat

Hazel oder ich haben das Problem nicht verstanden. Ich dachte es geht um sowas:

Code:


#include<iostream>
#include<string>
#include<algorithm>

using namespace std;

struct lexer
{
   operator()(char& c)
   {
      string s1 = c;
      s1 += "Was auch immer";
      v.push_back(s1);
   }

  vector<std::string> v;
} lex_instance;

int main()
{
   string foo = "Hallo";

   cout << foo << endl;
   for_each(foo.begin(), foo.end(), lex_instance);
   cout << foo << endl;

   return 0;
}



Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Mazze
JLI'ler


Alter: 39
Anmeldedatum: 02.01.2004
Beiträge: 145

Medaillen: Keine

BeitragVerfasst am: 09.03.2004, 21:13    Titel: Antworten mit Zitat

jo..so wie es in deinem code steht gehts...
sieht bei mir allerdings eher so aus (quick'n'dirty geändert!!!!)
Code:

class lexer
{
   public:
      vector<char> test;

   void operator()(char c)
   {
      //Sonstwas mit c machen...
      test.push_back(c);
   }

};

int main()
{
   string foo = "Hallo";
   cout << foo << endl;
   
   lexer l;
   for_each(foo.begin(), foo.end(), l);
   
   vector<char>::iterator it = l.test.begin();
   for(;it != l.test.end();++it)
      cout << (*it) << endl;

   return 0;
}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 09.03.2004, 21:16    Titel: Antworten mit Zitat

Warum ging es dann vorher nicht? Bei mir hat sowas bis jetzt immer geklappt... darf ich mal den Originalcode sehen?
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 09.03.2004, 21:17    Titel: Antworten mit Zitat

Wie jetzt? Funktioniert der Code oder habe ich nur das Problem erkannt?

C.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Mazze
JLI'ler


Alter: 39
Anmeldedatum: 02.01.2004
Beiträge: 145

Medaillen: Keine

BeitragVerfasst am: 09.03.2004, 21:31    Titel: Antworten mit Zitat

Also Hazel's Code geht schon nur mit meinen Änderungen halt nicht mehr...
Bei Christians code is wohl das geliche Problem wie bei mir..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 09.03.2004, 21:43    Titel: Antworten mit Zitat

Ja okay, das Problem ist immer noch die Übergabe by Value, aber die von "lex". Wenn man for_each benutzt kann man es lösen(hab andere Möglichkeiten noch nicht getestet)

Code:

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>

using namespace std;

struct lexer
{
   vector<string> * meep;

   lexer(vector<string> * v) : meep(v) { }

   operator()(char c)
   {
      string tmp;
      tmp += c;
      tmp += "eep";
      meep->push_back(tmp);
   }
};

int main()
{
   vector<string> meep;
   lexer lex(&meep);
   string foo = "Hallo";

   cout << foo << endl;
   for_each(foo.begin(), foo.end(), lex);
   
   cout << meep.size();

   return 0;
}

_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mazze
JLI'ler


Alter: 39
Anmeldedatum: 02.01.2004
Beiträge: 145

Medaillen: Keine

BeitragVerfasst am: 09.03.2004, 21:47    Titel: Antworten mit Zitat

Jo das klappt!
Danke Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 09.03.2004, 21:59    Titel: Antworten mit Zitat

Okay ich hab das Problem jetzt endgültig:

Code:

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>

using namespace std;

struct lexer
{
   vector<string> meep;

   operator()(char c)
   {
      string tmp;
      tmp += c;
      tmp += "eep";
      meep.push_back(tmp);
   }
};

int main()
{
   lexer lex;
   string foo = "Hallo";

   cout << foo << endl;
   lex = for_each(foo.begin(), foo.end(), lex);

   cout << lex.meep.size() << endl;

   return 0;
}


for_each liefert den geänderten Functor zurück. STL-Header lesen ist manchmal von Vorteil. ;)
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mazze
JLI'ler


Alter: 39
Anmeldedatum: 02.01.2004
Beiträge: 145

Medaillen: Keine

BeitragVerfasst am: 09.03.2004, 22:01    Titel: Antworten mit Zitat

Jo...ich hatte die nötigen Hilfemittel links neben mir liegen...aber das hab ich dabei dann übersehen Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 30.08.2004, 10:56    Titel: Antworten mit Zitat

Ich hab irgendwie ein kleines Problem mit dem Einbinden von
'#include <algorithm>'.

Es erscheint solch eine Fehlermeldung:


D:\Programme\Microsoft Visual Studio\VC98\INCLUDE\algorithm(592) : error C2784: '_D __cdecl std::operator -(const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &,const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &)' : could not deduce template
argument for 'const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &' from 'class std::list<class CBillboard *,class std::allocator<class CBillboard *> >::iterator'
D:\Programme\Microsoft Visual Studio\VC98\INCLUDE\algorithm(589) : see reference to function template instantiation 'void __cdecl std::_Sort_0(class std::list<class CBillboard *,class std::allocator<class CBillboard *> >::iterator,class std:
:list<class CBillboard *,class std::allocator<class CBillboard *> >::iterator,bool (__cdecl *)(const class CBillboard &,const class CBillboard &),class CBillboard ** )' being compiled
......

Woran könnte das liegen, dass der Compiler ein Problem damit haben könnte, Algorithm einzubinden?
_________________
Kein Rückzug! Kein Aufgeben!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 30.08.2004, 12:04    Titel: Antworten mit Zitat

Bist du dir sicher, dass du nix im STL-Code versehentlich geändert hast?
Vielleicht hilft es, wenn du die STL-Header nochmal neu drüberinstallierst.

PS: Zeigt die Fehlermeldung auf ein bestimmtes Codestück. Es kann auch sein, dass es irgendwelche Namenskonflikte gibt, die es ohne den Header nicht in deinem Code gab.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2, 3, 4  Weiter
Seite 1 von 4

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum