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

前端之家收集整理的这篇文章主要介绍了c – 编译器/链接器错误“未定义的引用”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
嗨,我刚刚开始学习C语言.我为傻瓜书买了这个大C,并且经历过它.到目前为止它真的很有趣,但现在我被卡住了.我一直在谷歌搜索这个问题,但无济于事.我正在使用我使用的代码块10.05与GNU GCC.

我一直收到错误消息:

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也应该包含头文件,只是为了清楚起见.你将它们分开的原因是什么?

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

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

猜你在找的C&C++相关文章