【问题标题】:Create a struct with template which get pointers of others struct使用模板创建一个结构,该结构获取其他结构的指针
【发布时间】:2017-01-26 10:14:07
【问题描述】:

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

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

因为它是一棵平衡树,每个分支都有一个索引,并且有一个指向其父分支的指针,以及指向它们的两个子分支的指针。 但我无法编译这段代码,我收到一个 C2079 错误,上面写着“Branch::value 使用了一个未定义的‘T’类”。 我使用VS2017RC。

==编辑==

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

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

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

感谢您的任何回答!

【问题讨论】:

  • 请在您实例化模板的地方发布代码。
  • [OT]:float index;我看起来很奇怪。
  • @molbdnilo 我用实例化在哪里的代码更新了问题

标签: c++ templates pointers struct


【解决方案1】:

我认为您的代码没有任何问题。我使用g++ -std=c++11 编译它,没有任何错误。我用过

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

实例化模板类。

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

【讨论】:

  • 我用代码更新了问题,包括 Tree 类中的实例化(在静态数组中)。谢谢你的回答!
【解决方案2】:

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

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

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

bint.value = 42;
bfloat.value = 42f;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    相关资源
    最近更新 更多