C++ 如何编码和传递(对std::vector的引用)?

C++ 如何编码和传递(对std::vector的引用)?,c++,vector,C++,Vector,我似乎不能把这个弄对 class Tree { Node* root; vector& dict; } class Node { vector& dict; char* cargo; Node left; Node right; } 我希望树的每个实例都有自己的dict,我希望它将对dict的引用传递给节点构造函数,该构造函数将递归地将引用传递给每个子节点,以便每个节点都可以在dict中输入指向自身的指针

我似乎不能把这个弄对

class Tree
{
    Node*   root;
    vector& dict;
} 

class Node
{
    vector& dict;
    char*   cargo;
    Node    left;
    Node    right;
}
我希望树的每个实例都有自己的dict,我希望它将对dict的引用传递给节点构造函数,该构造函数将递归地将引用传递给每个子节点,以便每个节点都可以在dict中输入指向自身的指针

我在以下语法方面遇到了很多问题:

  • 初始化向量
  • 将对向量的引用传递给节点构造函数
  • 在节点构造函数中接收引用
我知道这东西很基本。我在教自己C++。
谢谢

您只能在构造函数的初始化列表中初始化引用。比如说,

Tree::Tree( vector<type>& d ) : dict(d) 
{
  ...
}
Tree::Tree(vector&d):dict(d)
{
...
}

只能在构造函数的初始化列表中初始化引用。比如说,

Tree::Tree( vector<type>& d ) : dict(d) 
{
  ...
}
Tree::Tree(vector&d):dict(d)
{
...
}

您没有指定您尝试的不起作用的内容,但我怀疑您在构造函数中遇到了问题,因为无法分配引用;你必须初始化它

另外,当使用
std::vector
时,必须为元素类型使用模板参数。所以你不能只使用
向量&
,你需要
向量&
,其中
某物
是任何元素类型

所以,你可能想要这样的东西:

class Tree
{
private:
    Node* root;
    std::vector<Something>& dict;

public:
    Tree(Node* aRoot, std::vector<Something>& aDict): root(aRoot), dict(aDict) {}
};

class Node
{
private:
    std::vector<Something>& dict;
    char*cargo;
    Node left;
    Node right;

    Node(std::vector<Something>& aDict, char* aCargo): dict(aDict), cargo(aCargo) {}
};
类树
{
私人:
节点*根;
std::vector和dict;
公众:
树(Node*aRoot,std::vector&aDict):根(aRoot),dict(aDict){
};
类节点
{
私人:
std::vector和dict;
char*货物;
左淋巴结;
节点权;
节点(std::vector&aDict,char*aCargo):dict(aDict),cargo(aCargo){}
};

您没有指定您尝试的不起作用的内容,但我怀疑您在构造函数中遇到了问题,因为无法分配引用;你必须初始化它

另外,当使用
std::vector
时,必须为元素类型使用模板参数。所以你不能只使用
向量&
,你需要
向量&
,其中
某物
是任何元素类型

所以,你可能想要这样的东西:

class Tree
{
private:
    Node* root;
    std::vector<Something>& dict;

public:
    Tree(Node* aRoot, std::vector<Something>& aDict): root(aRoot), dict(aDict) {}
};

class Node
{
private:
    std::vector<Something>& dict;
    char*cargo;
    Node left;
    Node right;

    Node(std::vector<Something>& aDict, char* aCargo): dict(aDict), cargo(aCargo) {}
};
类树
{
私人:
节点*根;
std::vector和dict;
公众:
树(Node*aRoot,std::vector&aDict):根(aRoot),dict(aDict){
};
类节点
{
私人:
std::vector和dict;
char*货物;
左淋巴结;
节点权;
节点(std::vector&aDict,char*aCargo):dict(aDict),cargo(aCargo){}
};

类节点{…节点左;..}不起作用。你需要使用一个指针,用于<代码>左和右< /Cord>节点。C++引用与爪哇/C引用没有任何共同之处。C#/Java引用更像是指针。使用“typedef vector&dict”会简化这个向量的使用吗?请找一个,否则你只会伤到你自己。@GMan:我找几个。感谢
类节点{…节点左;..}不起作用。你需要使用一个指针,用于<代码>左和右< /Cord>节点。C++引用与爪哇/C引用没有任何共同之处。C#/Java引用更像是指针。使用“typedef vector&dict”会简化这个向量的使用吗?请找一个,否则你只会伤到你自己。@GMan:我找几个。谢谢你在Node类中不缺少一个“public:”吗?在Node类中不缺少一个“public:”吗?