首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译器/链接器错误“未定义的引用”

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

Stack Overflow用户
提问于 2012-10-26 08:17:12
回答 2查看 1.3K关注 0票数 6

嗨,我刚刚开始学习C++。我买了一本很大的C++ for Dummies的书,并且一直在看。到目前为止真的很有趣,但现在我被卡住了。我一直在谷歌上搜索这个问题,但一无所获。我正在使用我正在使用的代码块10.05和GNU的GCC。

我一直收到这样的错误:

代码语言:javascript
复制
In function 'main':
undefined reference to 'SafeCracker(int)'

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

Main:

代码语言:javascript
复制
#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;
}

功能:

代码语言:javascript
复制
#include <iostream>

using namespace std;

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

标题:

代码语言:javascript
复制
using namespace std;

#ifndef SAFESTUFF_H_INCLUDED
#define SAFESTUFF_H_INCLUDED

 string SafeCracker(int SafeID);

#endif // SAFESTUFF_H_INCLUDED
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-26 08:26:34

您没有编译与第一个文件一起列出的第二个文件。试着直接用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无法编译。您需要的是在Codeblock中创建一个项目,并将所有三个文件(包括*.cpp文件和*.h文件)添加到其中。

票数 2
EN

Stack Overflow用户

发布于 2012-10-26 08:26:12

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

C++必须导入字符串库才能使用字符串,否则一切都会被视为字符数组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13079174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档