未解决的外部错误
Unresolved externals error
我知道有很多这类问题,但我不确定我到底做错了什么。我有两个类,Player和HumanPlayer。HumanPlayer应该从Player类继承。当我试图在HumanPlayer.cpp文件中做构造函数并编译时,我得到以下错误:
错误2 LNK1120: 1 unresolved externals
错误1错误LNK2001:未解决的外部符号"public: __thiscall Player::Player(void)"(? ? 0 player@@qae@xz)
我读到需要在派生类的构造函数中显式调用基类,所以我相信我已经这样做了,因为编译器没有抛出错误。如果有人能给我指出正确的方向,那就太好了。我也在使用MS Visual Studio 2010。
有问题的文件如下:
//Player.h
#pragma once
#include <string>
using namespace std;
class Player{
public:
Player();
Player(const string &);
void setName(string);
string getName();
void sowSeeds();
void play();
private:
string name;
};
//Player.cpp
#include <iostream>
#include "Player.h"
using namespace std;
//constructor
Player::Player(const string &enteredName){
name = enteredName;
}
//HumanPlayer.h
#pragma once
#include <string>
#include "Player.h"
using namespace std;
class HumanPlayer : public Player{
public:
HumanPlayer();
HumanPlayer(const string &);
private:
};
//HumanPlayer.cpp
#include <iostream>
#include "Player.h"
#include "HumanPlayer.h"
using namespace std;
//constructor
HumanPlayer::HumanPlayer() : Player(){
}
HumanPlayer::HumanPlayer(const string &enteredName) : Player(enteredName){
}
您没有实现不带参数的构造函数Player::Player()
。并且由于HumanPlayer::HumanPlayer()
调用了您从未实现的Player::Player()
构造函数,因此您有问题。
在Player.cpp中,您需要添加默认构造函数的定义。
Player::Player()
: name( "anonymous-player" )
{}
但也许你不希望玩家能够匿名,在这种情况下,你应该删除
行Player();
从Player.h 。因为你已经声明了一个构造函数,它接受一个字符串参数,编译器不会自动生成Player
类的默认构造函数,没有人能够在不提供玩家名称的情况下实例化它。
您不需要手动调用基构造函数,如果不这样做,编译器将调用默认构造函数(除非使用虚拟继承)。您只需要实现默认构造函数Player::Player()。
相关文章:
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 我收到错误LNK2001:未解析的外部符号(C++代码)
- Visual Studio 2017 中的 QtMetaObject 未解决的外部错误
- 外部"C"拆卸导致奇怪的链接器错误
- C++指针无法在函数外部传递值和分段错误(核心转储)错误
- 在Embarcadero C++ Builder中生成的DLL未解决的外部链接错误
- 可视抽象类 c++(错误 LNK 2001:未解析的外部符号)
- 如何摆脱C++中未解析的外部符号"private: static char"错误?
- 当 lib 已添加到其他依赖项时,如何在 VS 中调试未解析的外部符号错误
- 错误LNK2019未解析的外部符号"public: __thiscall SLinkList<char>::SLinkList<char>(void)"
- 外部函数在 main() 上调用时返回分段错误 11.(C++)
- 引入参数化构造函数后显示 LNK 2019 未解析外部符号的代码错误
- 每次我要使用外部资源时,我都会得到:collect2。exe:错误 ld 返回 1 退出状态
- 链接器错误:切换到unicode生成给出:未解析的外部符号WinMain
- C#WPF和C++/CLI以及C++在C++/CLI中添加外部库错误
- 函数 LNK2019 "int __cdecl __scrt_common_main_seh(void)" 中引用的未解析外部符号主错误 (?__scrt_common_main_seh@@YAHXZ
- C++:在"try"外部创建的类型会导致错误,但在内部不会
- 编译错误外部接口Simulink
- 为什么这会给出多个定义错误:外部 int i;国际 i;.