Threadproblem, bzw. Frage

  • Threadproblem, bzw. Frage

    Hallo,

    ich möchte mich jetzt mal ein wenig mit (SDL)Threads beschäftigen.
    Dazu wollte ich dem Thread folgende Struktur als Parameter übergeben:

    map<string,map<int,s_image> >

    Am besten ich poste mal nen bissl Code (ohne includes):

    Quellcode

    1. using namespace std;
    2. struct s_image {
    3. string filename;//Filename
    4. Sint16 x; // X-Pos
    5. Sint16 y; // Y-Pos
    6. };
    7. typedef map<string,map<int,s_image> > t_mimage;
    8. string menu = "testmenu"; //global
    9. int HandleImage (void *IMG) {
    10. t_mimage* test = (t_mimage*) IMG;
    11. cout << "\nTestausgabe:" << test[menu][0]->filename << endl;
    12. return 0;
    13. }
    14. int main(void) {
    15. t_mimage IMAGE;
    16. t_mimage* p_IMAGE = &IMAGE;
    17. IMAGE["testmenu"][0].filename = "picture.jpg";
    18. IMAGE["testmenu"][0].x = 10;
    19. IMAGE["testmenu"][0].y = 100;
    20. SDL_Thread *imgthread;
    21. imgthread = SDL_CreateThread (HandleImage, p_IMAGE);
    22. SDL_KillThread(imgthread);
    23. return 0;
    24. }
    Alles anzeigen


    Aber das ganze wird nicht compiliert, sondern wird abgebrochen mit:
    error: no match for ‘operator[]’ in ‘test[menu]’


    Ich weiß das der Fehler im Zugriff auf das Object in der Threadfunktion liegt. Funktioniert das ganze nur nicht, weil an die Funktionen der Zeiger übergeben wird?

    Vielleicht kann ja einer mal einen Denkanstoß geben :)
    Danke.

    Thomas
    Murphy war ein Optimist.
  • "phax" schrieb:

    Es sollte eigentlich "test[menu][0].filename" da dort kein Pointer gespeichert ist.


    Hm, da kommt genau der gleiche Fehler beim Compilieren:
    error: no match for ‘operator[]’ in ‘test[menu]’


    Wenn ich ein "cout << test" in die Funktion HandleImage einfüge, bekomme ich auch eine Adresse.

    Ich nehme mal an, es liegt an den eckigen Klammern, aber ich wüsste nicht wie ich die anders schreiben sollte....

    Thomas
    Murphy war ein Optimist.