6

嗨,我刚开始学习 C++。我为傻瓜书买了这本大的 C++ 书,并且一直在阅读它。到目前为止它真的很有趣,但现在我被困住了。我一直在谷歌搜索这个问题,但无济于事。我正在使用我正在使用带有 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
4

2 回答 2

2

您没有编译与第一个文件一起列出的第二个文件。尝试直接用 gcc 编译来理解这一点。

假设您的文件名为:

  • 主文件
  • SafeCracker.cpp
  • 安全资料.h

这就是你正在做的

gcc main.cpp

虽然你应该这样做

gcc main.cpp SafeCracker.cpp

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

另一方面,从看到 Daniel Hu 的答案,<iostream>自动<string>为您包括在内。您不应依赖此功能,而应包含<string>在每个使用字符串的文件中。

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

于 2012-10-26T00:26:33.507 回答
1

我想是因为你没有#include <string>

C++ 必须导入字符串库才能使用字符串,否则所有内容都被视为 char 数组。

于 2012-10-26T00:26:12.090 回答