Problem mit map
-
Ich habe ein kleines Problem mit meiner Map, die ich in der Header-Datei deklariert habe:
typedef std::map<int,double> levelMap;
In einer Funktion in meiner cc-Datei übergebe ich die map wiefolgt:
double SnrEval::addNoiseLevel(double mTime, levelMap addMap, AirFrame* frame)
{levelMap::const_reverse_iterator iter;
....
Kann ich den Iterator derart implementieren???
Danke Tronador
-
ja
-
templäd schrieb:
ja
Danke.
Wie sähe das Einfügen eines neuen Elementes in die Map aus?
MfG Tronador
-
Erstmal als Tip:
// addMap als Referenze definieren! double SnrEval::addNoiseLevel(double mTime, levelMap &addMap, AirFrame* frame) { ...Sonst wird jedes mal deine levelMap samt Inhalt kopiert, und das einfügen eines neuen Elements würde sich auf deine ursprünglich übergebene Map nicht auswirken (sondern nur in der Kopie). Willst du bestimmt nicht, oder? Falls doch, vergiss, was ich gesagt habe.

Einfügen geht ganz einfach:
addMap.insert( std::pair<int,double>(100, 1.0) ); // oder addMap[100] = 1.0;
-
Danke, nur leider bekomme ich vom Compiler den Fehler:errorC2601 syntax error 'identifier'.
MfG Tronador
-
Code zum Fehler? Zeile + Umgebung?
MfG SideWinder
-
Artchi schrieb:
addMap.insert( std::pair<int,double>(100, 1.0) );besser
addMap.insert(std::make_pair(100, 1.0));
-
Der Fehler taucht in einer weiteren Funktion in der Header-Datei auf. Aber die Fragestellung wäre die Gleich wie zuvor.
void addNewMessage(AirFrame* frame, levelMap &addMap);
MfG Tronador
-
So, habe das obige Problem gelöst, nur leider sitze ich am Nächsten:
double SnrEval::addNoiseLevel(double mTime,const levelMap &addMap, AirFrame* frame) { levelMap::const_iterator iter; double timer = 0.0; double sumNoiseLevel = 0.0; for(timer=0.0; timer<=timer + simTime(); timer++){ for( iter = addMap.begin()->first;iter != addMap.end()->first;iter++){ EV << (*iter).first << " => " << (*iter).second << endl; if(timer=mTime){ //addition sumNoiseLevel += defaultChannel.noiseLevel; } } } EV << " sumNoiseLevel: "<< sumNoiseLevel<<endl; return sumNoiseLevel; }SnrEval.cc(436) : error C2679: binary '=' : no operator found which takes a righ
t-hand operand of type 'const double' (or there is no acceptable conversion)
C:\Programme\Microsoft Visual Studio 8\VC\INCLUDE\xtree(405): could be '
std::_Tree<_Traits>::const_iterator &std::_Tree<_Traits>::const_iterator::operat
or =(const std::_Tree<_Traits>::const_iterator &)'
with
[
_Traits=std::_Tmap_traits<double,double,std::less<double>,std::alloc
ator<std::pair<const double,double>>,false>
]
while trying to match the argument list '(std::_Tree<_Traits>::const_ite
rator, const double)'
with
[
_Traits=std::_Tmap_traits<double,double,std::less<double>,std::alloc
ator<std::pair<const double,double>>,false>
]
SnrEval.cc(436) : error C2678: binary '!=' : no operator found which takes a lef
t-hand operand of type 'std::_Tree<_Traits>::const_iterator' (or there is no acc
eptable conversion)
with
[
_Traits=std::_Tmap_traits<double,double,std::less<double>,std::alloc
ator<std::pair<const double,double>>,false>
]
C:\Programme\Microsoft Platform SDK\Include\guiddef.h(197): could be 'in
t operator !=(const GUID &,const GUID &)'
C:\Programme\Microsoft Visual Studio 8\VC\INCLUDE\xtree(303): or 'bool s
td::_Tree<_Traits>::const_iterator::operator !=(const std::_Tree<_Traits>::const
_iterator &) const'
with
[
_Traits=std::_Tmap_traits<double,double,std::less<double>,std::alloc
ator<std::pair<const double,double>>,false>
]
while trying to match the argument list '(std::_Tree<_Traits>::const_ite
rator, const double)'
with
[
_Traits=std::_Tmap_traits<double,double,std::less<double>,std::alloc
ator<std::pair<const double,double>>,false>
]
NMAKE : fatal error U1077: '"C:\Programme\Microsoft Visual Studio 8\VC\BIN\cl.ex
e"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.MfG Tronador
-
Kannst du bitte mal die C++-Syntax einschalten?
Und was ist die Zeile 436??? (hab keine Lust mir den kompletten Code anzuschauen)
-
Artchi schrieb:
Kannst du bitte mal die C++-Syntax einschalten?
Und was ist die Zeile 436??? (hab keine Lust mir den kompletten Code anzuschauen)
Entschuldige bitte....
Der Compiler beschwert sich in der Zeile:
for( iter = addMap.begin()->first;iter != addMap.end()->first;iter++){MfG Tronador
-
So:
for( iter = addMap.begin();iter != addMap.end();iter++){Weil first ist der Schlüssel des Map-Index, second der Wert. Halt die, die du mit pair bzw. make_pair hinzugefügt hast.