Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Mazze JLI'ler
Alter: 39 Anmeldedatum: 02.01.2004 Beiträge: 145
Medaillen: Keine
|
Verfasst am: 09.03.2004, 20:16 Titel: operator() behält nix im vektor |
|
|
Moin,
also ich hab ein recht Merkwürdiges Problem, vermutlich produziert aus eigener Dummheit oder Unwissenheit:
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..  |
|
Nach oben |
|
 |
Christian Rousselle Site Admin

Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 09.03.2004, 20:30 Titel: |
|
|
Ist lex wirklich ein Objekt der Klasse oder der Klassenname selber?
C. |
|
Nach oben |
|
 |
Mazze JLI'ler
Alter: 39 Anmeldedatum: 02.01.2004 Beiträge: 145
Medaillen: Keine
|
Verfasst am: 09.03.2004, 20:32 Titel: |
|
|
lex ist ein Objekt (Lexer ist der Klassenname) |
|
Nach oben |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 09.03.2004, 21:03 Titel: |
|
|
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 |
|
 |
Christian Rousselle Site Admin

Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 09.03.2004, 21:04 Titel: |
|
|
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 |
|
 |
Mazze JLI'ler
Alter: 39 Anmeldedatum: 02.01.2004 Beiträge: 145
Medaillen: Keine
|
Verfasst am: 09.03.2004, 21:13 Titel: |
|
|
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 |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 09.03.2004, 21:16 Titel: |
|
|
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 |
|
 |
Christian Rousselle Site Admin

Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 09.03.2004, 21:17 Titel: |
|
|
Wie jetzt? Funktioniert der Code oder habe ich nur das Problem erkannt?
C. |
|
Nach oben |
|
 |
Mazze JLI'ler
Alter: 39 Anmeldedatum: 02.01.2004 Beiträge: 145
Medaillen: Keine
|
Verfasst am: 09.03.2004, 21:31 Titel: |
|
|
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 |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 09.03.2004, 21:43 Titel: |
|
|
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 |
|
 |
Mazze JLI'ler
Alter: 39 Anmeldedatum: 02.01.2004 Beiträge: 145
Medaillen: Keine
|
Verfasst am: 09.03.2004, 21:47 Titel: |
|
|
Jo das klappt!
Danke  |
|
Nach oben |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 09.03.2004, 21:59 Titel: |
|
|
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 |
|
 |
Mazze JLI'ler
Alter: 39 Anmeldedatum: 02.01.2004 Beiträge: 145
Medaillen: Keine
|
Verfasst am: 09.03.2004, 22:01 Titel: |
|
|
Jo...ich hatte die nötigen Hilfemittel links neben mir liegen...aber das hab ich dabei dann übersehen  |
|
Nach oben |
|
 |
LeeDiGer Super JLI'ler

Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 30.08.2004, 10:56 Titel: |
|
|
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 |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 30.08.2004, 12:04 Titel: |
|
|
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 |
|
 |
|