C“未定义的引用”,但我在同一个文件中指定了它

时间:2012-11-30 21:19:36

标签: c++ reference undefined nintendo-ds

我正在尝试Nintendo DS编程,我有一个main.cpp文件,一个snake.h文件和一个snake.cpp文件。当我编译(使用Makefile)时,我得到了

/home/david/Dropbox/sources/ds/04_snake/source/snake.cpp:228: undefined reference to `printBlock(int, int, unsigned short, int)'
/home/david/Dropbox/sources/ds/04_snake/source/snake.cpp:230: undefined reference to `printBlock(int, int, unsigned short, int)'

这是函数中的错误

void drawSnake(game g) {
    int i;
    printBlock(g->s->last[0], g->s->last[1], g->bgColor, g->block);
    for(i=0; g->s->points[i][0]!=-1 && i<MAXLENGHT; i++)
        printBlock(g->s->points[i][0], g->s->points[i][1], g->s->color, g->block);
    return;
}

但是在同一个文件中,大约有100行,我有

int printBlock(game g, int x, int y, u16 color, int thickness) { /*code*/ }

如果我评论使用printBlock的行(在drawSnake函数中),代码编译时没有错误。 我试图改变名称,改变位置,但我无法理解为什么只有那个函数给我错误。

2 个答案:

答案 0 :(得分:7)

这是一个不同的功能(五个参数而不是四个)。

你可能打算像这样称呼它:

printBlock(g, g->s->points[i][0], ...
           ^ THIS

(其他呼叫网站也是如此。)

答案 1 :(得分:4)

你错过了game类型的第一个参数。你可能需要更改第228行:

    printBlock(g->s->last[0], g->s->last[1], g->bgColor, g->block);

到此:

    printBlock(g, g->s->last[0], g->s->last[1], g->bgColor, g->block);

,类似于第230行。