Я объявляю вектор в файле .h:
typedef std::vector<bool> bit_vector;
bit_vector decoded_lcw_vec;
В файле .cc я заполняю вектор так:
bit_vector decoded_lcw_vec(corrected_array, corrected_array + sizeof corrected_array / sizeof corrected_array[0]) ;
и правильные значения в нем:
printf( "\n\n Decode LDU1 LCW Vector Complete:");
for(int i = 0 ; i < 72; i++ ) cout << decoded_lcw_vec[i];
дает:
Decode LDU1 LCW Vector Complete:000000000000000000000000000000000000111111111111000000000000000000000101
поэтому проблема в том, что если я пытаюсь получить доступ к вектору вне функции, в которой он заполнен, я получаю ошибку сегмента. Независимо от того, как я пытаюсь получить доступ к вектору, программа умирает. Я хочу делать:
uint16_t
ldu1::lcf() const
{
const size_t LCF_BITS[] = {
0, 1, 2, 3, 4, 5, 6 , 7
};
const size_t LCF_BITS_SZ = sizeof(LCF_BITS) / sizeof(LCF_BITS[0]);
const uint16_t lcf = extract(decoded_lcw_vec, LCF_BITS, LCF_BITS_SZ);
return lcf;
}
это сег ошибки. Я пробовал много других способов получить доступ к вектору. Если я попробую какой-либо оператор печати или что-то еще, ошибки программы seg. Таким образом, независимо от того, как я пытаюсь это сделать, программа вызывает ошибку при попытке доступа к вектору вне функции, в которой он заполнен. Проблема должна быть в том, что я пытаюсь сделать незаконный доступ правильным? Как это может быть, так как я объявил вектор закрытым в файле .h и класс не был уничтожен ?? Этот вектор должен, по крайней мере, у меня сложиться впечатление, что он сохранится, пока класс не будет уничтожен.
Возможно ли, что этот вектор находится в стеке и, следовательно, выходит за рамки контроля времени, возвращаемого после вызова?
Кажется, проблема в том, что вы объявляете новую переменную с тем же именем в вашей функции. Эта область видимости переменных является функцией и уничтожается в конце функции. Если вы хотите, чтобы он был членом класса, измените эту строку:
bit_vector decoded_lcw_vec(corrected_array, corrected_array + sizeof corrected_array / sizeof corrected_array[0]) ;
чтобы:
decoded_lcw_vec = bit_vector(corrected_array, corrected_array + sizeof corrected_array / sizeof corrected_array[0]);
Других решений пока нет …