编译器/链接器错误“未定义的引用”

时间:2012-10-26 00:17:12

标签: c++ linker-errors codeblocks

您好,我刚开始学习C ++。我为Dummies书买了这个大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

2 个答案:

答案 0 :(得分:2)

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

假设您的文件被命名为:

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

这就是你正在做的事情

gcc main.cpp

虽然你应该这样做

gcc main.cpp SafeCracker.cpp

另外,SafeCracker.cpp也应该包含头文件,只是为了清楚起见。你将它们分开的原因是什么?

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

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

答案 1 :(得分:1)

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

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