如何在 C++ 中以正确的方式声明全局向量?

问题描述 投票:0回答:1

为什么我得到:

  • 错误:“MyTreeModelNodePtrArray”未命名类型;您的意思是“MyTreeModelNode”吗? 在我的头文件中?

我的代码是:

#ifndef MYTREEMODELNODE_H 
#define MYTREEMODELNODE_H

#include <wx/wx.h>
#include <memory>
#include <vector>

class MyTreeModelNode;
std::vector<std::unique_ptr<MyTreeModelNode>> MyTreeModelNodePtrArray;

class MyTreeModelNode final
{
public:

    MyTreeModelNode(MyTreeModelNode* parent, int id, const wxString& column1, const wxString& column2, const wxString& column3, const wxString& column4);
    MyTreeModelNode(MyTreeModelNode* parent, const wxString& branch);
    ~MyTreeModelNode();

    MyTreeModelNode* GetParent();
    MyTreeModelNodePtrArray& GetChildren();    //here the error

private:
    MyTreeModelNode* pParent;
    MyTreeModelNodePtrArray mChildren;
};

#endif // MYTREEMODELNODE_H
c++ vector compiler-errors
1个回答
0
投票

您的问题在这一行:

std::vector<std::unique_ptr<MyTreeModelNode>> MyTreeModelNodePtrArray;

这将

MyTreeModelNodePtrArray
声明为 std::vector<std::unique_ptr<MyTreeModelNode>> 类型的全局
variable
,其标识符(名称)不能(稍后)用作变量类型。

您想要的是将

MyTreeModelNodePtrArray
定义为 std::vector<std::unique_ptr<MyTreeModelNode>>
alias
。这可以使用
using
关键字来完成:

class MyTreeModelNode;
// Create the "MyTreeModelNodePtrArray" type alias...
using MyTreeModelNodePtrArray = std::vector<std::unique_ptr<MyTreeModelNode>>;

class MyTreeModelNode final
{
public:

    MyTreeModelNode(MyTreeModelNode* parent, int id, const wxString& column1, const wxString& column2, const wxString& column3, const wxString& column4);
    MyTreeModelNode(MyTreeModelNode* parent, const wxString& branch);
    ~MyTreeModelNode();

    MyTreeModelNode* GetParent();
    MyTreeModelNodePtrArray& GetChildren();    //here the error

private:
    MyTreeModelNode* pParent;
    MyTreeModelNodePtrArray mChildren;
};

进一步阅读

© www.soinside.com 2019 - 2024. All rights reserved.