Как мне кодировать и передать (ссылка на std :: vector)? - PullRequest
1 голос
/ 08 августа 2010

Я не могу понять это правильно.

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

class Node
{
    vector& dict;
    char*   cargo;
    Node    left;
    Node    right;
}

Я хочу, чтобы каждый экземпляр Tree имел свой собственный dict, и я хочу, чтобы он передавал ссылку на dict конструктору узла, который бы рекурсивно передавал ссылку на каждый дочерний узел, чтобы каждый узел мог ввести указатель на сам в диктанту.

У меня много проблем с синтаксисом:

  • получить инициализированный вектор
  • передать ссылку на вектор конструктору Node
  • получить ссылку в конструкторе Node

Я знаю, что это довольно простые вещи. Я учу себя с ++.

Спасибо

Ответы [ 2 ]

3 голосов
/ 08 августа 2010

Вы не указали, что пытались, но это не работает, но я подозреваю, что у вас проблемы с конструкторами, потому что ссылка не может быть назначена; Вы должны инициализировать его.

Также, когда вы используете std::vector, вы должны использовать параметр шаблона для типа элемента. Так что вы не можете просто использовать vector&, вам нужно vector<Something>&, где Something - это любой тип элемента.

Итак, вы, вероятно, хотите что-то вроде этого:

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) {}
};
2 голосов
/ 08 августа 2010

Вы можете инициализировать ссылку только в списке инициализации конструктора. Например,

Tree::Tree( vector<type>& d ) : dict(d) 
{
  ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...