首先抱歉代码是外语。编译调用基类方法而不是孩子一
我有一个问题,当我编译下面的代码编译器调用基本的方法,而不是孩子一个问题。
我有这个基类:
Jugador.h
#ifndef JUGADOR_H_
#define JUGADOR_H_
#include <iostream>
using namespace std;
class Jugador{
protected:
bool color;//true->rojo false-> azul
public:
Jugador(bool rojo) { color = rojo; }
Jugador() {}
virtual string getInput();
~Jugador(){}
};
#endif
Jugador.cpp
#include "Jugador.h"
using namespace std;
string Jugador::getInput(){
cout<<"Is Called"<<endl;
}
而这个子类: JugadorHumano.h
#ifndef JUGADORHUMANO_H_
#define JUGADORHUMANO_H_
#include <iostream>
#include <string>
#include "Jugador.h"
using namespace std;
class JugadorHumano: public Jugador {
public:
JugadorHumano(bool rojo) :Jugador(rojo) {}
virtual string getInput();//Tested with override too
};
#endif
JugadorHumano.cpp
#include "JugadorHumano.h"
using namespace std;
string JugadorHumano::getInput(){
string input;
getline(cin, input);
return input;
}
然后,在第三类方法无关,这两个外使用他们,我已经取得:
Jugador rojo;
rojo=JugadorHumano(true);
rojo.getInput();
感谢您的关注。
编辑:对不起,这是我的第一个问题,增加了cpp文件
EDIT2地:由@ Raindrop7 sugested的变化,现在编译,但仍然调用基方法,它打印“被称为”,而不是做函数getline。
EDIT3:谢谢
OLD:当编译器到达getInput它引发错误 “参考 'Jugador :: getInput()' 是未定义”。我不知道为什么会发生这种情况,也没有办法解决这个问题。
查看对象切片 – NathanOliver
请查看[MCVE]。你的代码片段既没有getinput()方法的实现,所以是的,链接器找不到它。 –
你在哪里定义了Jugador :: getInput()? – HazemGomaa