2015-01-29 3 views
-1

У меня есть программа, разработанная Eclipse.
Ошибка не может быть выполнена

Это код, как указано ниже.

class VectorClass 
{ 
    private: 
     vector<string> VectorTest; 
    public: 
     VectorClass() 
     { 
      VectorTest[0] = "TEST1"; 
      VectorTest[1] = "TEST2"; 
      VectorTest[2] = "TEST3"; 
     } 
}; 

Когда вы написали такой код, я получаю следующую ошибку при отладке.

No source available for "std::basic_string<char, std::char_traits<char>, 
std::allocator<char> >::assign() at 0x3e0009dfd6" 

Итак, я изменил код следующим образом.

class VectorClass 
{ 
    private: 
     vector<string> *VectorTest; 
    public: 
     VectorClass() 
     { 
      VectorTest = new vector<string>; 
      VectorTest->at(0) = "TEST1"; 
      VectorTest->at(1) = "TEST2"; 
      VectorTest->at(2) = "TEST3"; 
     } 
}; 

Тогда это стало такой ошибкой.

terminate called after throwing an instance of 'std::out_of_range' 
    what(): vector::_M_range_check 

И меня осмотрели, но я не знаю причины.

Будет ли неправильное использование.

Спасибо за чтение.

+0

В обоих случаях ваш 'vector' всегда имеет размер 0. Попробуйте' VectorTest.push_back ("TEST1") 'добавить новый элемент. –

+0

Вы работаете в режиме отладки или выпуска? – 0x499602D2

ответ

0

Векторы не работают как массивы во всех случаях. Массив имеет фиксированный размер, вектор может расти и сокращаться. Следовательно, хотя вы можете использовать operator[] для назначения элементов массиву, вы не можете использовать его для доступа к элементам вектора за пределами его текущего размера.

Чтобы разместить элементы в векторе сначала, вам необходимо использовать push_back(), а затем вы можете использовать operator[] для доступа/назначения этих элементов. (Кроме того, можно определить вектор с определенным размером.)

Следующий код должен работать:

VectorTest.push_back(string("TEST1")); 
VectorTest[0] = "Change TEST1"; 

Разница здесь в том, что после push_back(), вектор имеет один элемент, так что теперь вы можете получить доступ к элементу в позиции 0.

+0

@DrewDormann Конечно. Вы отправили комментарий во время редактирования, чтобы сделать эту точку более явной. :) –

0

Кстати, я пытаюсь вложить векторную переменную.

Поэтому, я думал, что код такой, как следующий.

class VectorClass 
{ 
    private: 
     vector< vector<string> > *VectorTest; 
    public: 
     VectorClass() 
     {  
      VectorTest = new vector< vector<string> >(20); 
      VectorTest->at(0) = new vector<string>(20); 

      VectorTest->at(0)->at(0) = "TEST1"; 
      VectorTest->at(0)->at(1) = "TEST2"; 
      VectorTest->at(0)->at(2) = "TEST3"; 
     } 
}; 

Однако вы не можете его скомпилировать.

Должен ли любой способ добиться этого бизнеса?

Спасибо за чтение.

Смежные вопросы