Вставка элемента в вектор из разных классов - PullRequest
1 голос
/ 08 мая 2011
Class A{
public:
      int a;
      vector<A> test;
};

Class B{
public:
      B();
      B(const B &rhs);
      ~B();
      B & insertTest(A element,A element1) {
        element.test.pushback(element1); //doesn't work
      }
      B & insertTest1(A element) {
        test1.pushback(element);//works
      }; 
private:
      vector<A> test1;
};

Я пытаюсь вставить элементы в эти два вектора. Это работает, когда я вставляю элемент в вектор test1 в классе B. Однако я не могу получить значение после вставки в вектор в классе A.

Ответы [ 4 ]

4 голосов
/ 08 мая 2011

Это работает в обоих случаях, но когда вы передаете element по значению функции, вы просто вставляете новый элемент в эту копию, а не в оригинал.

Изменения, которые вы вносите вкопия исчезнет, ​​как только вы выйдете из функции.

3 голосов
/ 08 мая 2011
B & insertTest(A element,A element1); {element.test.pushback(element1);}
                                    ^

Удалите эту точку с запятой.

Также:

  • Вы изменяете копии, поскольку передаете по значению - Передать A & element, A & element1 вместо
  • Класс A на самом деле не должен содержать сам вектор - что вы там пытаетесь сделать?
  • Вы не опубликовали свой реальный код
2 голосов
/ 08 мая 2011

Вы передаете элементы по значению;Вы должны передать их по ссылке, чтобы внести какие-либо видимые изменения.Кроме того, почему вы объявляете свои функции как возвращающие ссылку на B, фактически ничего не возвращая?Кроме того, синтаксис совершенно неправильный, и код даже не должен компилироваться.

1 голос
/ 08 мая 2011

Следующее не работает, потому что элемент передается по значению

      B & insertTest(A element,A element1) {
        element.test.push_back(element1); //doesn't work
      }

Следующее работает, так как вы изменяете test1, который является членом этого

      B & insertTest1(A element) {
        test1.push_back(element);//works
      }; 

Если вы хотите, чтобы первый работал, передайте элемент по ссылке, например так:

      B & insertTest(A& element,A element1) {
        element.test.push_back(element1);
      }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...