无法调用另一个类-ERR-未解析的外部符号
Cannot Call Another Class - ERR - Unresolved External Symbol
我正试图从main.cpp调用Raw类中的另一个函数foo(),但我一直收到这个错误,我不明白我的代码出了什么问题。我在C++中工作,我使用的是QT框架。我是这个语言和框架的新手。
错误:LNK2019:未解析的外部符号"public:void __thiscall RAW::foo(void)"(?foo@Raw@@QAEXXZ)。找不到文件:main.obj
main.cpp
#include "raw.h"
using namespace std;
int main(int, char*)
{
Raw newRaw;
newRaw.foo();
return 0;
}
raw.cpp
#include "raw.h"
#include <iostream>
using namespace std;
void foo()
{
cout << "hin";
}
Raw::Raw()
{
cout << "rawn";
}
原始.h
#ifndef RAW_H
#define RAW_H
class Raw
{
public:
Raw();
void foo();
};
#endif // RAW_H
在raw.cpp中,您必须像这样定义foo:
void Raw::foo()
{
cout << "hin";
}
您必须放入Raw::,这样编译器就知道这是类成员函数foo,而不是其他独立函数。
正如Mihai所说,您也可以在Header文件(.h/.hpp)中定义它,但如果您的类方法在任何方面都很复杂,则这被认为是不好的做法。
class Raw {
public:
void foo() {
cout << "hin";
}
};
真正应该这样做的唯一时间是对于极其简单的类和实际上只不过是getter的方法。
您应该理解在C++中定义和声明某物之间的区别。
声明只是简单地制作一个原型,例如void doSomething(int);
是一个有效的声明,因为它表明方法doSomething接受int并返回void。
现在,你需要描述一下它的作用。这是执行void doSomething(int val) { cout << val << endl; }
时的定义,因为您现在正在描述如何使用该函数。
您可以在头文件中进行定义,如我所示,也可以在源文件(.c/.cpp)中进行定义(如Mihai所示)(这是最佳实践)。不过,您只能在Header文件中进行声明。
好的,这是一些替代方案:
//raw.h
#ifndef RAW_H
#define RAW_H
class Raw
{
public:
Raw();
void foo(){cout << "rawn";}
};
或
//raw.h
#ifndef RAW_H
#define RAW_H
class Raw
{
public:
Raw();
void foo();
};
Raw::Raw()
{
cout << "rawn";
}
在这两种情况下,您将不再需要raw.cpp中的实现。但正如我之前所说,我的第一个解决方案是标准的c++实践。
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 未解析的外部符号_MsiLocateComponentW@12.
- 在C++中使用 gRPC 时未解析的外部符号
- LibPrivoxy: 未解析的外部符号 __declspec(dllimport) int __stdcall Sta
- 尝试从 XamlApplication 编译 C++/WinRT 空白应用程序时,我收到未解析的外部符号 winrt_make_*
- 我收到错误LNK2001:未解析的外部符号(C++代码)
- 可视抽象类 c++(错误 LNK 2001:未解析的外部符号)
- 如何摆脱C++中未解析的外部符号"private: static char"错误?
- 当 lib 已添加到其他依赖项时,如何在 VS 中调试未解析的外部符号错误
- 仅在少数方法(静态或共享库)中解析的外部符号
- 未解析的外部符号"__declspec(dllimport)与 Spdlog c++ 库
- 函数 _main (OPENGL C++) 中引用的未解析的外部符号 ________
- 错误LNK2019未解析的外部符号"public: __thiscall SLinkList<char>::SLinkList<char>(void)"
- 使用静态 constexpr 成员的未解析外部符号
- 引入参数化构造函数后显示 LNK 2019 未解析外部符号的代码错误
- Dlib LNK2001未解析的外部符号USER_ERROR__consistent_build_configurati
- 矛盾的未解决的外部符号+未使用的库与VS2017和FFMPEG 4
- 链接器错误:切换到unicode生成给出:未解析的外部符号WinMain
- 类模板上一个特定函数的未解析外部符号
- LNK2001:未解析的外部符号public:static类std::vector