LinuxおよびMac OS用に開発されたコードを継承しました。今、私はVisual Studioを使ってWindowsに移植しています。私がVisual Studio 2010でビルドしようとしたとき、私は以下のエラーを受けました。 簡略化されたクラスの構造を以下に報告します。C++クラスの継承継承に関する設計上の問題
はNode
クラスを考えてみましょう:
isLeaf
と
getNodeList
は純粋仮想メソッドです
class Node
{
public:
Node();
virtual ~Node(){}
virtual bool isLeaf() const = 0;
/* other methods */
virtual vector<Node *>& getNodeList() const=0;
};
。
class CompositeNode : public Node
{
public:
CompositeNode(){ cout << "CompositeNode constructor";}
~CompositeNode(){ cout << "CompositeNode destructor";}
bool isLeaf() const { return false;}
vector<Node *>& getNodeList() const{
return m_NodeList;
}
private:
vector<Node*> m_NodeList
};
純粋仮想メソッドの両方を実装します。ちょうどisLeaf
方法、およびCompositeNode
を実装
次に、2つの派生クラスLeafNode
class LeafNode : public Node
{
public:
LeafNode(){ cout << "leaf constructor";}
~LeafNode(){ cout << "leaf destructor";}
bool isLeaf() const { return true; }
vector<Node *>& getNodeList() const {}
};
。 私は、Visual Studioでこのコードをビルドしようとすると、私は次のエラーを取得する:
error C4716: 'LeafNode::getNodeList()' : must return a value
私はコンパイラを理解するが、私はこの状況を管理する方法を知りません。 この問題を解決するには、クラスをどのように再設計する必要がありますか? ありがとうございました。
このコードは、g ++、clang、または他のC++コンパイラでコンパイルする必要があるのでしょうか。 IMHO、すべてのC++コンパイラは、この場合VC++のような同様のエラーを生じるはずです。 – Scheff
これは、継承やクラスとは関係ありません。 – juanchopanza