0

我在文件“draw.h”中有一个函数:

void TileSystem() {
    // Some code here.        
}

在“main.c”文件中,我称之为,因为我在文件中#included“draw.h”。该功能运行良好!

但是后来,我决定将函数重命名为

void CreateTileSystem() {
    // Some code here.        
}

我得到以下输出:

gcc main.c -std=c99 -o main `pkg-config --cflags --libs allegro-5.0 allegro_acodec-5.0 allegro_audio-5.0 allegro_color-5.0 allegro_dialog-5.0 allegro_font-5.0 allegro_image-5.0 allegro_main-5.0 allegro_memfile-5.0 allegro_physfs-5.0 allegro_primitives-5.0 allegro_ttf-5.0`
main.c: In function ‘main’:
main.c:217:12: warning: implicit declaration of function ‘CreateTileSystem’ [-Wimplicit-function-declaration]
/tmp/cclNEg6q.o: In function `main':
main.c:(.text+0xb1e): undefined reference to `CreateTileSystem'
collect2: error: ld returned 1 exit status
make: *** [main] Error 1

然后,我只是将它重命名回 TileSystem 并且运行良好。我在整个代码中没有其他引用。这根本没有意义!我想重命名,以便在函数中使用动词(我认为这是一个更“正确”的标准)。好吧,我真的很想知道会发生什么。我真的找不到错误,而且当我重命名它时,它又恢复了工作,这让我更加沮丧。

非常感谢你!

4

3 回答 3

1

您还必须更改头文件中的名称,draw.h.

该错误/警告表明该函数没有前向声明,这在较旧的 C 方言中导致假设该函数是int fn(int)(如果有记忆的话)。

当您将其改回时它会起作用,因为标头从未被修改过,因此它仍然提供旧名称的前向声明。

于 2013-02-01T03:35:22.520 回答
0

我尝试像您在此处描述的那样创建几个简单的文件,但我没有遇到任何问题。所以:

  • 你确定你在 draw.h 和 main.c 中为新函数使用了相同的名称(真的确定)?

  • 我不了解 allegro:它是否恰好有一个名为 TileSystem 的函数?

除此之外,我建议从一个简单的设置开始(所以只有 include、main 函数和 main.c 中的调用,以及 draw.h 中的声明),确保使用 编译gcc main.c -std=c99 -o main,然后构建你的应用程序直到它当前的状态,一块一块地,直到错误再次开始发生。这应该可以帮助您确定问题的根源。

于 2013-02-01T03:47:08.560 回答
0

我重新创建了头文件,没有更改任何内容,并且它有效。这确实与我从不更改文件有关(我的意思是,重命名文件或排除它)。发生了一些非常地下的编译问题。

于 2013-02-01T04:00:13.970 回答