Неопределенная ссылка на scene_render - PullRequest
0 голосов
/ 04 мая 2018

Вот следующая основная функция или моя программа

void scene_render(const struct Scene *s); 

int main(void) {                        //leave main as is
    struct Scene myScene;
    scene_init(&myScene);

    int keep_going = 1;
    while (keep_going == 1) {               
        cons_clear_screen();            //clear off-screen display buffer
        scene_render(&myScene);         //render the scene to display buffer
        cons_update();                  //copy the display buffer to the display
        cons_sleep_ms(ANIMATION_DELAY); //pause
        scene_update(&myScene);         //update the scene

        int key = cons_get_keypress();  //see if the user has pressed a key
        if (key != -1) {
            keep_going = 0;
        }   
    }
    return 0;
}

void scene_render(Scene *s)
{ 
    cons_clear_screen(); 
    for(int i=0; i<NUM_PARTICLES; i++) 
    { 
        particle_render(&s->parts[i]);
    }
}

Когда я запускаю команду makefile на Cygwin, она пропускает ошибки и начинает компиляцию, но при обнаружении scene_render выдает ошибку (& myScene) ;. Это говорит о том, что ссылка на него не определена. Он ссылается на переменную в функции, которая является const структурой, в то время как все другие экземпляры, где вызывается & myScene, являются просто структурами. Есть идеи, в чем проблема? Эта лаборатория в основном посвящена использованию указателей, если это поможет.

Программа (с помощью внешних функций) должна генерировать и отбрасывать произвольно окрашенные пиксели вокруг командного окна, откидывая их назад, чтобы держать их на экране. Удаление проблемы приводит к успешной компиляции программы, но затем загружает пустое окно, которое, похоже, ничего не делает.

1 Ответ

0 голосов
/ 04 мая 2018

Задача

С

void scene_render(const struct Scene *s); 

вы обещаете scene_render принимает const struct Scene в качестве параметра. Кстати, вы можете отказаться от использования struct здесь. C ++ знает, Scene является struct.

Но определенная функция

void scene_render(Scene *s)

, который принимает обычный старый, не const Scene, поэтому, когда компоновщик ищет функцию, соответствующую обещанию, он не находит ее.

Решение

Изменение

void scene_render(Scene *s)

до

void scene_render(const Scene *s)

чтобы сдержать обещание. Но убедитесь, что const -корректность сохраняется повсюду.

...