sdl_2 auf mac os mojave



  • Heyo zsm 🙂

    ich wollte sdl für ein uniprojekt auf meinem mac zum laufen bringen (haben unser projekt vorher immer nur auf windows benutzt) und habe jz den fehler bekommen:

    variable sized object may not be initialized

    Im zusammenhang mit sdl2 kann ich mir das jedoch nicht erklären.
    Hier ist der codeausschnitt:

    void draw_grid(vector <person> &pa, vector <destination> &da, vector<obstacle> &oa, SDL_Renderer *renderer, int magnification_factor){

    //draw all objects on screen with a magnication ; staerkere vergroesserung moeglich?

    clear_drawing(renderer); // pigment the screen white
    if (magnification_factor == 1){
        draw_grid(pa,da,oa,renderer);
    }
    if (magnification_factor == 2){
        int shift_factor = magnification_factor; //shift of all points because of the magnification
        int quantity_drawing_points = 4; //quadrieren vom magnification factor
    
        for(int p = 0; p < pa.size(); p++){
            SDL_SetRenderDrawColor(renderer, pa[p].r, pa[p].g, pa[p].b, 0);
            SDL_Point drawing_points[quantity_drawing_points] = {
                {pa[p].x + pa[p].x * shift_factor , pa[p].y + pa[p].y * shift_factor},
                {pa[p].x + pa[p].x * shift_factor + 1 , pa[p].y + pa[p].y * shift_factor},
                {pa[p].x + pa[p].x * shift_factor , pa[p].y + pa[p].y * shift_factor + 1},
                {pa[p].x + pa[p].x * shift_factor + 1 , pa[p].y + pa[p].y * shift_factor + 1},
            };
            SDL_RenderDrawPoints(renderer,drawing_points,quantity_drawing_points);
        }
    
        for(int d = 0; d < da.size(); d++){
            SDL_SetRenderDrawColor(renderer, da[d].r, da[d].g, da[d].b, 0);
            SDL_Point drawing_points[quantity_drawing_points] = {
                {da[d].x + da[d].x * shift_factor , da[d].y + da[d].y * shift_factor},
                {da[d].x + da[d].x * shift_factor + 1 , da[d].y + da[d].y * shift_factor},
                {da[d].x + da[d].x * shift_factor , da[d].y + da[d].y * shift_factor + 1},
                {da[d].x + da[d].x * shift_factor + 1 , da[d].y + da[d].y * shift_factor + 1}
            };
            SDL_RenderDrawPoints(renderer,drawing_points,quantity_drawing_points);
        }
    
        for(int o = 0; o < oa.size(); o++){
            SDL_SetRenderDrawColor(renderer,oa[o].r, oa[o].g, oa[o].b, 0);
            SDL_Point drawing_points[quantity_drawing_points] = {
                {oa[o].x + oa[o].x * shift_factor , oa[o].y + oa[o].y * shift_factor},
                {oa[o].x + oa[o].x * shift_factor + 1 , oa[o].y + oa[o].y * shift_factor},
                {oa[o].x + oa[o].x * shift_factor , oa[o].y + oa[o].y * shift_factor + 1},
                {oa[o].x + oa[o].x * shift_factor + 1 , oa[o].y + oa[o].y * shift_factor + 1}
            };
            SDL_RenderDrawPoints(renderer,drawing_points,quantity_drawing_points);
        }
    
        }
    SDL_RenderPresent(renderer);
    

    }

    P.s. sorry dass der code (die erste zeile) nicht komplett richtig angezeigt wird...kp was da net geht.

    P.p.s. die fehlermeldung taucht in zeile 11, 22 und 33 auf und beziehen sich auf die variable quantity_drawing_points

    Danke im voraus für eure hilfe

    LG Smilee



  • const int quantity_drawing_points = 4;
    

    VLAs werden durch C++-Compiler eigentlich nur unterstützt, wenn diese auch C99-konform sind (in C99 gehören VLAs zum Standard).
    Am besten - zumindest in C++- komplett darauf verzichten.



  • @Smilee_N19 sagte in sdl_2 auf mac os mojave:

    haben unser projekt vorher immer nur auf windows benutzt

    Da der Visual Studio Compiler das noch nie zugelassen hat, verwendest du vermutlich einen g++. Dann solltest du versuchen, mit g++ -Wall -pedantic-errors -std=c++17 zu übersetzen, um auch auf Windows standardkonform zu sein.