首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对已定义方法的未定义引用

对已定义方法的未定义引用
EN

Stack Overflow用户
提问于 2019-07-13 15:47:53
回答 1查看 86关注 0票数 0

因此,我试图访问一个在另一个类中定义并在标头中包含原型的方法。我非常肯定,我定义了它,但是它总是出现对SafeCracker的未定义的引用。

Main.cpp

代码语言:javascript
复制
#include <iostream>
#include "mystuff.h"
using namespace std;

void BigDog(int KibblesCount);

int main()
{
    cout << SafeCracker(1);
    return 0;
}

mystuff.cpp

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

using namespace std;

string SafeCracker(int SafeID)
{
    return "123456";
}

mystuff.h

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

#ifndef MYSTUFF_H_INCLUDED
#define MYSTUFF_H_INCLUDED

string SafeCracker(int SafeID);


#endif // MYSTUFF_H_INCLUDED
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-13 16:41:34

这里它告诉您,您有一个未定义的引用,因此您对原型没有真正的问题。

如果您忘记包含包含原型的头文件,您就会得到以下内容

代码语言:javascript
复制
main.cpp: In function ‘int main()’:
main.cpp:8:13: error: ‘SafeCracker’ was not declared in this scope
     cout << SafeCracker(1);

未定义的引用是链接器错误。最可能的原因是您在编译时没有使用mystuff.cpp

如果从命令行进行编译,则应将这两个文件作为参数。

如果使用的是调用编译器的IDE,请确保该文件是项目的一部分。

例如,在Code::Block中,右键单击文件名,然后转到“”(如果我没有记错)

您还可能在mystuff.cpp中的函数声明中输入了一个错误(但这里似乎并非如此)

现在,关于您的代码有一件重要的事情您应该注意:

using namespace放在头文件中是非常糟糕的做法。

using namespace std;源文件中的.cpp主要取决于您,而using语句只适用于该特定文件。

但是,如果您将其放入一个希望通过#include包含的头文件中,那么包含它的任何代码都将强制使用using

下面是一个示例:

main.cpp

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

// including mystuff.h to use that awesome SafeCracker()
#include "mystuff.h"

// I need to use an std::map (basically an associative array)
#include <map>

// the map of my game
class map
{
    int tiles[10][10];
};

int main()
{
    // The std map I need to use
    std::map<int, int> mymappedcontainer;

    // The map of my game I need to use
    map mytiles;

    // The reason why I need to include mystuff.h
    cout << SafeCracker(1);
    return 0;
}

通常,我的class map不应该是一个问题,因为我从标准库中包含的map是在名称空间std中,所以要使用它,您需要使用std::map

这里的问题是,由于mystuff.h中有using namespace std;,所以已经使用了符号map,这就产生了冲突。

您现在不使用您的头文件,或者如果您将在很长一段时间后再次使用它们,那么您可能希望使用已在std命名空间中使用的名称。

我建议您在使用标准库之前使用std:: (例如,std::string而不是string )。

PS:在C++中,"class“指的是class数据结构,您在这里创建的函数不是任何class的一部分。您应该说“在另一个文件中定义”或“在另一个翻译单元中定义”。

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

https://stackoverflow.com/questions/57020638

复制
相关文章

相似问题

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