c++ - 编译器/链接器错误 "undefined reference"

标签 c++ linker-errors codeblocks

您好,我刚开始学习 C++。我买了这本大 C++ for Dummies 书,并且一直在阅读它。到目前为止真的很有趣,但现在我被困住了。我一直在谷歌搜索这个问题,但无济于事。我正在使用我正在使用带有 GNU GCC 的代码块 10.05。

我不断收到一条错误消息:

In function 'main':
undefined reference to 'SafeCracker(int)'

代码并不复杂。我是新来的,非常沮丧。我不想跳过这一部分;我想知道发生了什么事。

主要内容:

#include <iostream>
#include "safestuff.h"

using namespace std;

int main()
{
  cout << "Surprise, surprise!" << endl;
  cout << "The combination is (once again)" << endl;
  cout << SafeCracker(12) << endl;
  return 0;
}

功能:

#include <iostream>

using namespace std;

string SafeCracker(int SafeID)
{
    return "13-26-16";
}

标题:

using namespace std;

#ifndef SAFESTUFF_H_INCLUDED
#define SAFESTUFF_H_INCLUDED

 string SafeCracker(int SafeID);

#endif // SAFESTUFF_H_INCLUDED

最佳答案

您没有编译与第一个文件一起列出的第二个文件。尝试直接使用 gcc 进行编译以了解这一点。

假设您的文件被命名为:

  • main.cpp
  • SafeCracker.cpp
  • safestuff.h

这就是你在做什么

gcc main.cpp

当你应该这样做的时候

gcc main.cpp SafeCracker.cpp

另外,为了清楚起见,SafeCracker.cpp 也应该包括头文件。有什么理由让他们分开?

另外,看到胡大侠的回答,<iostream>自动包括 <string>为你。您不应依赖此功能,而应包含 <string>在每个使用字符串的文件中。

(来自下面的评论) 您可能正在尝试将 main.cpp 构建为独立文件。这将使 SafeCracker.cpp 保持未编译状态。您需要在 Codeblocks 中创建一个项目并将所有三个文件添加到其中(*.cpp 文件和 *.h 文件)。

关于c++ - 编译器/链接器错误 "undefined reference",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13079174/

相关文章:

c++ - 为什么 GUID 的 IsEqualGUID() 和 "operator =="声明为返回 int?

c++ - 如何在 Linux 中使用 GLFW 函数正确链接 C++ 对象?

c - 在GCC中编译C文件时出错(多个文件合而为一)

c - 在具有多个输入值的 C 中使用 atof() 函数

c++ - 如何使用 SDL 获取 win32 文件浏览器?

c++ - 从文件获取数字输入的(非常)简单的 C++ 程序中的编译器问题

c++ - Visual Studio C++ 中的智能感知

c++-cli - libcurl编译和链接器错误

c++ - 做一个有潜在溢出的乘法然后用除法验证有什么问题吗?

java - java.library.path 中没有 ocijdbc9