У меня проблема с вызываемым неправильным методом. В моей программе у меня есть 3 класса: символические, нетерминальные и терминальные. нетерминал и терминал являются подклассами символа.
В моей программе я только создаю терминал или нетерминал. Вот несколько сокращенных версий каждого класса:
#ifndef SYMBOL_H
#define SYMBOL_H
#include <vector>
class terminal;
using namespace std;
class symbol {
public:
virtual vector<terminal> getFirstSet();
};
#endif
_
#ifndef NONTERMINAL_H
#define NONTERMINAL_H
#include "symbol.h"
#include "terminal.h"
#include <vector>
using namespace std;
class terminal;
class nonTerminal: public symbol {
public:
vector<terminal> getFirstSet();
};
#endif
_
#ifndef TERMINAL_H
#define TERMINAL_H
#include "symbol.h"
#include <vector>
using namespace std;
class terminal: public symbol {
public:
vector<terminal> getFirstSet();
};
#endif
У меня есть эта функция:
bool addFirst(symbol s) {
vector<terminal> first = s.getFirstSet();
//....
}
Однако всякий раз, когда я вызываю его с помощью терминала или нетерминала, он всегда использует метод symbol::getFirstSet
. Как я могу заставить его вызвать правильный nonTerminal::getFirstSet
или terminal::getFirstSet
метод?