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

跑腿

所以我试图访问一个在另一个类中定义的方法,并且在头文件中有原型。我很肯定我定义了它,但它不断弹出对 SafeCracker 的未定义引用。

主程序

#include <iostream>
#include "mystuff.h"
using namespace std;

void BigDog(int KibblesCount);

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

mystuff.cpp

#include <iostream>

using namespace std;

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

mystuff.h

using namespace std;

#ifndef MYSTUFF_H_INCLUDED
#define MYSTUFF_H_INCLUDED

string SafeCracker(int SafeID);


#endif // MYSTUFF_H_INCLUDED
速度凤凰

在这里它告诉你你有一个未定义的引用,所以你对原型没有真正的问题。
如果你忘记包含包含原型的头文件,你会得到类似的东西

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::Blocks 中右键单击文件名并转到“添加到项目”(如果我没记错的话)

您也有可能在函数声明中打错了字mystuff.cpp(尽管这里似乎并非如此)


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

将 ausing namespace放在头文件中是非常糟糕的做法

using namespace std;.cpp源文件主要是你的,而且using声明只适用于特定的文件。
但是如果你把它放在一个要通过 包含的头文件中#includeusing那么任何包含它的代码都会被强制执行。

下面是一个例子:
main.cpp

#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;
}

通常, myclass map应该不是问题,因为map I 从标准库中包含在 namespace 内std,因此要使用它,您需要转到std::map.
这里的问题是,因为 mystuff.h 已经using namespace std;在里面了,这个符号map已经被使用了,这就产生了冲突。

你现在不知道谁会使用你的头文件,或者你是否会在很长一段时间内再次使用它们,也许那时你会想要使用已经在 std 命名空间中使用的名称。
我建议你std::在从标准库中获取的东西之前使用std::string而不是仅仅string作为例子)


PS:在 C++ 中,“class”指的是一种class数据结构,你在这里做的函数不属于任何class. 你应该说“在另一个文件中定义”或“在另一个翻译单元中定义”

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

对已定义函数的未定义引用

来自分类Dev

angularjs $ localStorage未定义,但已定义

来自分类Dev

访问未定义的属性-但已定义。

来自分类Dev

Javascript变量未定义但已定义

来自分类Dev

已定义的未定义变量

来自分类Dev

未定义的引用

来自分类Dev

C ++对模板方法的未定义引用

来自分类Dev

未定义对类方法的引用

来自分类Dev

C ++对模板方法的未定义引用

来自分类Dev

NoMethod - 未定义的方法 <方法名称> 错误,即使该方法已定义

来自分类Dev

未捕获的错误:调用未定义的方法stdClass :: update(),即使该方法已定义

来自分类Dev

“未定义的引用” [OpenBSD 3.5系统定义的方法]

来自分类Dev

Python 3 exec方法:NameError:未定义已定义函数的名称

来自分类Dev

为nil:NilClass提供Rails未定义方法`each'...但已定义

来自分类Dev

PHP未定义变量错误,但已定义

来自分类Dev

打字稿模块:已定义未定义

来自分类Dev

响应数据已定义,但data.value未定义?

来自分类Dev

变量未定义错误,即使已定义

来自分类Dev

未定义的偏移量:0 ...,虽然已定义

来自分类Dev

JavaScript说对象内部的已定义变量未定义

来自分类Dev

jQuery错误:Var已定义,但说未定义?

来自分类Dev

已定义函数坚持其未定义

来自分类Dev

JS-未定义的对象(但该对象已定义)

来自分类Dev

无法读取未定义的属性(已定义时)

来自分类Dev

响应数据已定义,但data.value未定义?

来自分类Dev

接收错误:注意:未定义变量-但已定义

来自分类Dev

NameError:全局名称“名称”未定义(已定义)。

来自分类Dev

PHP私有变量是“未定义”,尽管已定义

来自分类Dev

对象未定义,但似乎已定义动作

Related 相关文章

热门标签

归档