【问题标题】:Undefined reference error in C using CodeBlocks IDE使用 CodeBlocks IDE 的 C 中未定义的引用错误
【发布时间】:2012-04-16 05:39:18
【问题描述】:

我只是在玩代码块并编写一个非常简单的程序,但我得到未定义的引用错误...我将完全相同的代码复制到其他地方并在终端中编译它并且工作正常,但只是没有不能在代码块中工作。

我的 main.c 是:

#include <stdio.h>
#include "subfunc.h"

int main()
{
    printhello();
    return 0;
}

然后我的 subfunc.c 是:

#include <stdio.h>
#include "subfunc.h"

void printhello(void)
{
    printf("hello world in function\n");
}

然后我的 subfunc.h 是:

void printhello(void);

谢谢

更新

其实..我想通了。我右键单击文件 subfunc.c 和 subfunc.h 并选择属性并转到构建选项卡,我发现编译文件和链接文件的选项没有勾选。谢谢

【问题讨论】:

  • 代码看起来不错。问题可能出在链接阶段,main.obj(编译后的 main.c)和 subfunc.obj 需要链接到一个可执行文件。
  • 未定义对 what 的引用?如果可能,请始终包含确切的错误消息。

标签: c codeblocks


【解决方案1】:


请参阅上图并与您的项目进行比较。仅与红色圆圈进行比较。忽略剩余的(剩余的是我的项目/作业) 在 my_subfunction.h 写

    #ifndef __MY_SUBFUNC_H__
    #define __MY_SUBFUNC_H__


    #include<stdio.h>
    void printhello(void);
    #endif

在 main.c 中

#include <stdio.h>
#include "my_subfunc.h"

int main()
{
    printhello();
    return 0;
}

和 my_subfun.c:-

#include <stdio.h>
#include "my_subfunc.h"

void printhello(void)
{
    printf("hello world in function\n");
}

我希望这会有所帮助.. 因为这确实对我有用。

【讨论】:

  • 因为你的头文件名是my_subfunction.h。我想你可能忘记添加“my_”
  • 通常&lt;&gt;用于“系统范围”包含文件,而""用于“本地”包含文件;在这种情况下"" 更正确;正如评论所解释的,OP 问题是关于链接的。此外,你的守卫错了,#endif 必须在文件的末尾。
  • @ShinTakezou:感谢您的更正。我错误地将#endif 放在了中间。非常感谢
  • 其实..我想我现在真的知道为什么了哈哈。我右键单击文件 subfunc.c 和 subfunc.h 并选择属性并转到构建选项卡,我发现编译文件和链接文件的选项没有勾选
  • 感谢您的时间和精力
【解决方案2】:

您没有确切说明未定义的错误是什么,但我打赌它与您的 main() 或 printhello() 函数有关。

确保在编译 main.c 和 subfunc.c 后,您在项目中链接 both 对象文件 main.obj 和 subfunc.obj。假设您为正在构建的当前项目同时包含 main.c 和 subfunc.c,这应该在代码块中自动发生。

【讨论】:

  • 其实..我想我现在真的知道为什么了哈哈。我右键单击文件 subfunc.c 和 subfunc.h 并选择属性并转到构建选项卡,我发现编译文件和链接文件的选项没有勾选
  • 感谢您的时间和精力
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-22
  • 2015-07-28
  • 1970-01-01
相关资源
最近更新 更多