Здравствуйте, Dmitry3, Вы писали:
D>Добрый день! D>Вы не сталкивались с такой проблемой:
D>имеются два класса: D>при добавлении нового элемента в пустой вектор при помощи push_back() элемент не добавляется! т.е. vtrB.size() == 0!!! D>В чем же дело?
странно. у Вас какая STL ?
ну во первых, попробуйте отладчиком пройти по шагам внутри push_back().
если непонятно, почему не происходит добавление элемента, попробуйте так —
B myB;
std::vector< B > vtrB( 1 );
//здесь проверить vtrB.size()
vtrB[0] = myB;
если всетаки не прояснится, выложите минимальный пример, воспроизводящий проблему.
Только что попробовал ваш пример (вот в таком вот виде):
#include <vector>
#include <iostream>
using namespace std;
class A
{
public:
A() { x=0; };
int x;
};
class B
{
public:
A* a;
B() { a = NULL; };
B(const B& b)
{
a = b.a; // мне необходимо чтобы объект указывал на ту же память.
}
};
int main()
{
std::vector<B> vtrB;
A* ptrA = new A;
B myB;
myB.a = ptrA;
vtrB.push_back(myB);
cout << vtrB.size() << endl;
return 0;
};
Оказывается, я сам виноват — по недосмотру один и тот же элемент у меня удаллся из вектора два раза перед тем, как поступал на выполнения тот код, что я написал в сообщении. Это и влияло каким-то образом на вектор — он начинал глючить.
D>один и тот же элемент у меня удаллся из вектора два раза ... Это и влияло каким-то образом на вектор — он начинал глючить. D>И заметьте — ни одного сообщения об ошибке!
А как удалялся этот элемент?
Здравствуйте, De Bug, Вы писали:
D>>один и тот же элемент у меня удаллся из вектора два раза ... Это и влияло каким-то образом на вектор — он начинал глючить. D>>И заметьте — ни одного сообщения об ошибке! DB>А как удалялся этот элемент?
Я искал элемент при помощи find(myVtr.begin(), myVtr.end()) затем, если полученный итератор не равен myVtr.end() далял его методом erase():