È la prima volta che provo C++ STL. Sto cercando di costruire un array associativo multidimensionale usando la mappa. Per esempio:avvisi C4503? Come posso risolvere/sbarazzarmi di loro?
typedef struct DA {
string read_mode;
string data_type;
void *pValue;
void *pVarMemLoc;
}DA;
int main()
{
map<string, map<string, map<string, map<string, map<string, DA*>>>>> DATA;
DATA["lvl1"]["stg1"]["flr1"]["dep1"]["rom1"] = new DA;
DATA["lvl1"]["stg1"]["flr1"]["dep1"]["rom2"] = new DA;
DATA["lvl1"]["stg1"]["flr1"]["dep1"]["rom3"] = new DA;
IEC["lvl1"]["stg1"]["flr1"]["dep1"]["rom1"]->read_mode = "file";
IEC["lvl1"]["stg1"]["flr1"]["dep1"]["rom2"]->read_mode = "poll";
IEC["lvl1"]["stg1"]["flr1"]["dep1"]["rom3"]->read_mode = "report";
return 0;
}
Quando si compila il codice di cui sopra in VS2005, ho avuto 170 di avvisi C4503. Tutti gli avvisi riguardano la "lunghezza del nome decorata superata, il nome è stato troncato". Il programma sembra funzionare bene.
Qualcuno si preoccupa di dedicare un po 'di tempo a spiegarmi che cosa ha causato questi avvertimenti e come risolvo em? grazie in anticipo :)
Warning 1 warning C4503: 'std::map<_Kty,_Ty>::~map' : decorated name length exceeded, name was truncated c:\program files\microsoft visual studio 8\vc\atlmfc\include\cstringt.h 2121
Warning 2 warning C4503: 'std::map<_Kty,_Ty>::map' : decorated name length exceeded, name was truncated c:\program files\microsoft visual studio 8\vc\atlmfc\include\cstringt.h 2121
Warning 3 warning C4503: 'std::map<_Kty,_Ty>::operator []' : decorated name length exceeded, name was truncated c:\program files\microsoft visual studio 8\vc\atlmfc\include\cstringt.h 2121
Warning 4 warning C4503: 'std::_Tree<_Traits>::~_Tree' : decorated name length exceeded, name was truncated c:\program files\microsoft visual studio 8\vc\atlmfc\include\cstringt.h 2121
Warning 5 warning C4503: 'std::map<_Kty,_Ty>::operator []' : decorated name length exceeded, name was truncated c:\program files\microsoft visual studio 8\vc\atlmfc\include\cstringt.h 2121
Warning 6 warning C4503: 'std::_Tree<_Traits>::iterator::~iterator' : decorated name length exceeded, name was truncated c:\program files\microsoft visual studio 8\vc\atlmfc\include\cstringt.h 2121
Warning 7 warning C4503: 'std::_Tree<_Traits>::iterator::iterator' : decorated name length exceeded, name was truncated c:\program files\microsoft visual studio 8\vc\atlmfc\include\cstringt.h 2121
Posso suggerire di utilizzare un 'boost :: shared_ptr' invece di un puntatore raw per la memorizzazione di' * DA'? Altrimenti, liberare tutta la memoria allocata diventerà probabilmente un incubo. – ereOn
Ciao, grazie per il tuo suggerimento. Avrò bisogno di studiare di più. Il mio programma è in realtà un exe chiamato da un exe principale. Nel programma, un intero gruppo (probabilmente migliaia) di * DA verrà assegnato per primo, quindi mentre il programma viene eseguito alcuni verranno liberati e allocati dinamicamente a seconda dei comandi di controllo dal principale exe. – justin
Così tante mappe. D: – GManNickG