繁体   English   中英

无法解决的外部错误

[英]Unresolved externals error

我知道有很多这样的问题,但是我不确定我到底在做什么错。 我有两个类,Player和HumanPlayer。 HumanPlayer应该从Player类继承。 当我尝试在HumanPlayer.cpp文件中执行构造函数并进行编译时,出现以下错误:

错误2错误LNK1120:1个未解决的外部

错误1错误LNK2001:无法解析的外部符号“ public:__thiscall Player :: Player(void)”(?? 0Player @@ 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()。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM