未定义的scene_render参考

时间:2018-05-03 23:37:25

标签: c++ pointers struct cygwin const

以下是主要功能或我的程序

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]);
    }
}

当我在Cygwin上运行makefile命令时,它会传递错误并开始编译,但在遇到scene_render(&amp; myScene);时会遇到错误。它说对它的引用是不确定的。它指的是函数中的变量是一个const结构,而调用&amp; myScene的所有其他实例都只是结构。知道问题可能是什么?这个实验主要是关于使用指针,如果有帮助的话。

程序(在外部函数的帮助下)应该在命令窗口周围生成并抛出随机颜色的像素,将它们弹回以使它们保持在屏幕上。删除该问题会导致程序成功编译,但随后会加载一个似乎什么都不做的空白窗口。

1 个答案:

答案 0 :(得分:1)

问题

void scene_render(const struct Scene *s); 

您承诺scene_renderconst struct Scene作为参数。顺便说一句,您可以在这里放弃使用struct。 C ++知道Scenestruct

但是定义的函数是

void scene_render(Scene *s)

采用普通的非const Scene,所以当链接器寻找与承诺匹配的函数时,它找不到。

解决方案

更改

void scene_render(Scene *s)

void scene_render(const Scene *s)

守信用。但要确保const-correctness始终保持不变。