使用模板创建一个结构,该结构可以获得其他结构

时间:2017-01-26 10:14:08

标签: c++ templates pointers struct

我想创建一个平衡的树。它适用于自定义结构,所以我想通过使用模板来创建包含任何类型的树来改进我的平衡树。还有我的问题:

template <typename T>
struct Branch {
    float index;
    T value;
    Branch *inf = nullptr;
    Branch *sup = nullptr;
    Branch *parent = nullptr;
};

因为它是一个平衡树,所以每个分支都有索引,并且有一个指向其父分支的指针,以及指向它们的两个子分支的指针。 但是我无法编译这段代码,我得到了一个C2079错误,该错误表明&#34; Branch :: value使用了一个&#39; T&#39;未定义&#34;。 我用的是VS2017RC。

== EDIT ==

我在我的班级树中找到了问题:

template <class T>
class Tree {
public:
    /**/
private:
    Branch<T>* _origine; //Initialized in constructor Tree() to nullptr
    Branch<T> _branches[1000]; //Here is the error
    /**/
};

所以问题是这个分支的静态数组,但我不知道如何初始化它......

感谢您的回答!

2 个答案:

答案 0 :(得分:1)

我没有看到您的代码有任何问题。我使用g++ -std=c++11编译它没有任何错误。我用了

int main() { Branch<int> b; } 

实例化模板类。

当类只有前向声明或不可见时,MSDN提到错误C2079。见https://msdn.microsoft.com/en-us/library/9ekhdcxs.aspx。这里提到的可能的解决方案是使用指针T和前向声明类型T或包括T的定义。 发布实例化代码肯定会有所帮助。 发布

的代码

答案 1 :(得分:0)

您可能缺少模板参数。你应该这样使用:

render() {
    var elems = this.props.items.course_list;
    console.log(elems.course_list);
    return (
      <div>

      </div>
    )
  }


}

因此,您可以使用正确的类型访问值

Branch<int> bint;
Branch<float> bfloat;