Члены класса живут столько же, сколько и объекты вашего класса. Проблема не в времени жизни объекта, а в том факте, что B::aobject
никогда не вызывал buildvectorA
, поэтому vectorA
пусто, поэтому vectorA.size() == 0
. Затем вы пытаетесь вычислить rand() % vectorA.size()
, и (целочисленное) деление на 0
является довольно плохой идеей.
Вы можете создать конструктор для A
и вызвать generaterandnum
, чтобы убедиться, что он всегда корректен:
class A {
private:
vector<string> vectorA;
string stringA[5] = { "1", "2", "3", "4", "5" };
string stringB[5] = { "6", "7", "8", "9" };
void buildvectorA()
{
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
vectorA.push_back(stringA[j] + stringB[i]);
}
}
}
public:
A() {
buildvectorA();
}
string generaterandnum() {
int num1 = NULL;
num1 = rand() % vectorA.size();
string card = vectorA[num1];
vectorA.erase(vectorA.begin() + num1);
return card;
}
};
Обратите внимание, что buildvectorA
теперь является закрытым методом. Мы не хотим, чтобы кто-то извне звонил, потому что им все равно, как генерируются случайные числа. Они просто хотят получить эти случайные числа.
Это также означает, что вашему классу C
не нужно вызывать buildvectorA
, и фактически ему даже не нужно иметь какой-либо объект A
.