1

我是 C++ 编程的新手,我正在尝试用 C++ 实现场景图。

应该有一个 Node 类,它是超类(和一个抽象类)和一些子类,如 Geometry、Group、Transformation 等。我需要实现一个图,其中任何一个子类对象都可以是节点。每个节点可以有一个或多个子节点。(子类有通用的方法和属性,也有不同的方法和属性。)

我需要创建一个图表,我可以在其中添加、删除节点并执行它们的常用方法,而不管它们的类型如何。

任何人都可以分享任何想法或方法来实现这样的图表吗?

编辑:这是我工作的示例定义。(我只添加了header内容,如果需要实现,我会提供。)

节点.h

using namespace std;

#include <cstdio>
#include <string>
#include <vector>

#ifndef NODE_H
#define NODE_H

class Node{
public:
  Node();
  virtual ~Node() = 0;
  Node(string name);

  string getName();
  void setName(string name);

  vector<Node*> getChildrenNodes();
  size_t getChildNodeCount();
  Node* getChildNodeAt(int i);
  void setChildernNodes(vector<Node*> children);

  void addChildNode(Node* child);

  virtual string getNodeType()=0; // to make this class abstract

protected:
  string name;
  vector<Node*> children;
};
#endif

几何.h

class Geometry :  public Node {
public:
    Geometry();
    ~Geometry();
    string getNodeType();
    // Method overrides and other class specific methods.
};

图.h

#include "node.h"

class Graph{
public:
    Graph();
    ~Graph();
    void addNode(Node* parent,Node* child);
    void addNode(Node* child);
    Node* getRoot();
private:
    Node* root;
};

这是我的 main.cpp

#include <cstdio>
#include <stdio.h>
#include <iostream>

#include "node.h"
#include "graph.h"

int main(){

    Graph sg;
    Geometry g1;

    sg.addNode(g1); // error: no matching function for call to ‘Graph::addNode(Geometry&)’

    return 0;
}

如果可以,请指出我哪里出错了。

4

0 回答 0