对已定义方法的未定义引用
Undefined reference to a defined method
所以我试图访问在另一个类中定义的方法,并在标题中具有原型。我很肯定我定义了它,但它不断弹出对 SafeCracker 的未定义引用。
主.cpp
#include <iostream>
#include "mystuff.h"
using namespace std;
void BigDog(int KibblesCount);
int main()
{
cout << SafeCracker(1);
return 0;
}
我的东西.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
的函数声明中输入了拼写错误(尽管这里似乎并非如此)
现在,您应该注意有关代码的重要事项:
将using namespace
放在头文件中是非常不好的做法。
.cpp
源文件中using namespace std;
主要由您决定,并且该语句using
仅适用于该特定文件。
但是,如果您将其放在要通过#include
包含的头文件中,则using
将被强制用于包含它的任何代码。
下面是一个示例: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;
}
通常,我的class map
应该不是问题,因为我从标准库中包含的map
位于命名空间std
内,因此要使用它,您需要std::map
。
这里的问题是,由于mystuff.h已经using namespace std;
,符号map
已经被使用,这会产生冲突。
您现在不知道谁将使用您的头文件,或者您是否将在很长一段时间内再次使用它们,也许那时您将需要使用已在 std 命名空间中使用的名称。
我建议您在从标准库中获取内容之前使用std::
而不是(例如std::string
而不仅仅是string
)
PS:在C++中,"类"指的是class
的数据结构,您在此处创建的函数不属于任何class
。您应该说"在另一个文件中定义"或"在另一个翻译单元中定义">
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- 使用mysql c++连接器的未定义引用
- 对 Scalar ::Scalar() 的未定义引用
- 对复制 CTOR 和 CTOR 的未定义引用
- 对显式实例化的模板函数的未定义引用
- TensorRT (C++ API) 对"createNvOnnxParser_INTERNAL"的未定义引用
- 2个模板化类的非模板友元函数未定义引用错误
- 编译 libfluid 样本控制器时对"event_base_del_virtual"的未定义引用
- 获取对function_name的未定义引用
- 对 'std::thread::_M_start_thread CMake 的未定义引用进行基准测试
- 对结构方法的未定义引用
- 使用内联函数 c++ 的未定义引用
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 对 DLOPEN 的未定义引用
- QT C++中对全局变量的未定义引用
- 快速数学导致对"__pow_finite"的未定义引用
- 对 boost::system::d etail::system_category_instance 的未定义引用,从
- OpenCV 3.4.3 中对 'cv::String::d eallocate()' 错误的未定义引用