Совсем недавно изучил правильное применение наследования классов в Java и подумал применить его к некоторому коду, который я пишу на C ++.
Ниже приведен заголовок для пустого Node.cpp:
#ifndef Node_h
#define Node_h
#include <string>
using namespace std;
///////////////////////////////////////////////////////
//Class Declarations
class Array;
class Hash;
class Node;
class BodyNode;
class RealNode;
class CharNode;
class ComboNode;
class EndNode;
class HashNode;
class NodeFollower;
///////////////////////////////////////////////////////
//Class Definitions
class Node{
public:
virtual string toString(int info) = 0;
};
class BodyNode: public Node{
public:
};
class RealNode: public BodyNode{
protected:
Hash *wordHash, *addressHash;
Array *followers;
int count;
//Initialization
RealNode();
~RealNode();
//Hashes
BodyNode getNext(int address);
NodeFollower getWord(BodyNode *word);
NodeFollower getAddress(int address);
string toString(int info);
};
#endif
Из этого кода я получаю следующую ошибку:
Node.h:43:11: error: invalid abstract return type for member function ‘BodyNode RealNode::getNext(int)’
Node.h:28:7: note: because the following virtual functions are pure within ‘BodyNode’:
Node.h:25:17: note: virtual std::string Node::toString(int)
Посмотрел это по всем google, stackoverflow и cplusplus, и в то время как я нашел много ответов, которые окружают эту проблемуЯ не мог найти точный ответ, который мне нужен, чтобы это исправить.Сайт cplusplus.com, с которого я работал, это:
http://www.cplusplus.com/doc/tutorial/polymorphism/
Кроме того, некоторые ответы, которые я нашел в stackoverflow, указали, что
using namespace std;
следует избегать, и это звучит как веская причина, но я не могу понять, как включить строку.Я пытался
string::string
для каждого объявления, и я пытался
using namespace std::string;
, но оба были безрезультатны.Заранее благодарю за помощь!