【问题标题】:undefined reference to self-written function未定义的对自写函数的引用
【发布时间】:2015-12-11 12:28:53
【问题描述】:

我知道这一定是个愚蠢的问题,但我现在 5 个小时都无法解决这个问题,这让我很生气:我正在学习 C++ 并按照我的要求做所有事情,但我无法构建我的函数,因为编译器无法识别我的函数。我尝试使用一个绝对简单的,但问题仍然存在。我正在使用代码块。 main.cpp、ezmukszik.cpp 和 ezmukszik.h 在同一个项目库中,我检查了 Settings/Compiler/Build Options 以将工作目录显式添加到编译器搜索目录。错误信息如下:

in function main
/in line 8/ undefined reference to 'ezmukszik()'

标题:

#ifndef EZMUKSZIK_H_INCLUDED
#define EZMUKSZIK_H_INCLUDED

#include <iostream>

int ezmukszik();

#endif // EZMUKSZIK_H_INCLUDED

源代码:

#include <iostream>

using namespace std;

int ezmukszik()
{
    std::cout << "Hello world!" << std::endl;
    return 0;
}

还有主要的:

#include <iostream>
#include "D:\BME suli\C++\Programok\ezmukszik\ezmukszik.h"

using namespace std;

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

任何帮助将不胜感激!

【问题讨论】:

  • 确保“ezmukszik.cpp”在“sources”而不是“headers”下。看起来它没有被传递给链接器。
  • 包含文件中的反斜杠是转义字符。正斜杠 / 应该和 \\ 一样好用
  • 不幸的是它在来源之下。
  • 你的ezmukszik.cpp 应该包括ezmukszik.h
  • 一些不相关的 cmets:不要在头文件中包含 iostream,因为那里不需要它,在 ezmukszik.cpp 中包含“ezmukszik.h”头文件。不要在全局范围内使用using namespace std,当你包含“ezmukszik.h”时不要使用这样的绝对路径,而是在make文件或你使用的任何构建环境中添加包含路径。

标签: c++ codeblocks undefined-reference


【解决方案1】:

我终于设法解决了这个问题,这是一个烦人的解决方案:我在新文件窗口的代码块中添加了源文件,它显示在项目源下,但由于某种原因它仍然没有编译.在最右边的窗口中右键单击添加它解决了这个问题。:) 谢谢大家的帮助!

【讨论】:

    【解决方案2】:

    该错误是 LINKER 错误,表示您的 ezmukszik.cpp 文件在编译为 ezmukszik.o 后未与 main.o 链接在一起。

    检查链接命令行。

    【讨论】:

    • 很抱歉我是个菜鸟,但你能告诉我该怎么做吗?
    • 最简单的方法是尝试从命令行链接您的应用程序,例如g++ -o myapp main.cpp ezmukszik.cpp。如果正常工作,则打开 CodeBlocks 项目设置并找到链接器设置。 CodeBlocks wiki 有一整页关于诊断此类错误:wiki.codeblocks.org/index.php?title=FAQ-Compiling_(errors)
    • 它说它不能将 g++ 识别为命令或程序(我有 Windows 7 64),我应该从 Code Blocks 单独下载它吗?
    • 它应该已经包含在代码块中,只需使用搜索找到它。 (它显然没有添加到 PATH)
    猜你喜欢
    • 2019-09-05
    • 2011-09-19
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    • 2012-10-07
    • 2015-10-02
    相关资源
    最近更新 更多