2016-02-04 5 views
-2

Я работаю над рабочим листом, который у меня есть для университета, и вопрос спрашивает меня: «Разрешить пользователю вводить 10 цифр с клавиатуры в массив», однако нам сказали, что нам нужно использовать классы и векторы для этой задачи. Когда я запускаю свой код, я получаю сообщение об ошибке: «Выражение: векторный индекс вне диапазона» может кто-нибудь помочь?Векторы C++ в классе

Array.h

#include <iostream> 
#include <vector> 

using namespace std; 

class Array 
{ 
private: 
    vector<int> lists; 
public: 
    void fillArray(); 
    void printForwards(); 
    void halfandHalf(); 
    void shiftArrayRight(); 

    Array(); 
    Array(vector<int>); 
}; 

Array.cpp

#include "Array.h" 
Array::Array() 
{ 
    lists[10]; 
} 
Array::Array(vector<int> lists) 
{ 
    this->lists = lists; 
} 
void Array::fillArray() 
{ 
    for (int i = 0; i < 10; i++) 
    { 
     cin >> lists[i]; 
    } 
} 
void Array::printForwards() 
{ 
    for (int i = 0; i < 10; i++) 
    { 
     cout << lists[i]; 
    } 
} 

Source.cpp

#include <iostream> 
#include "Array.h" 
using namespace std; 

int main() 
{ 

    Array list1,list2; 

    //fill array 1 
    list1.fillArray(); 
    //fill array 2 
    list2.fillArray(); 

    // print array 1 
    list1.printForwards(); 
    //print array 2 
    list2.printForwards(); 

    system("pause"); 
    return 0; 
} 

Заранее спасибо

+2

Что вы ожидаете 'списки [10];' делать? – tkausl

+0

Я попытался разобраться с проблемой, поэтому я отправил сюда. – Darision

+0

Я думал, что он автоматически инициализирует каждый экземпляр массива класса до 10 (0-9) – Darision

ответ

3

lists[10]; не собирается создать вектор О f размер 10. Он попытается получить доступ к 11-му элементу пустого вектора. Если вы хотите создать вектор размера 10, то вы можете использовать

Array::Array() : lists(std::vector<int>(10, 0)) {} 

Я также предлагаю вам изменить

Array::Array(vector<int> lists) 
{ 
    this->lists = lists; 
} 

Для

Array::Array(vector<int> lists) lists(lists) {} 

Вы также должны изменить ваше для петель в используйте вектор size() вместо жесткого кодированного значения

void Array::fillArray() 
{ 
    for (int i = 0; i < lists.size(); i++) // uses size() 
    { 
     cin >> lists[i]; 
    } 
} 
void Array::printForwards() 
{ 
    for (int i = 0; i < lists.size(); i++) // uses size() 
    { 
     cout << lists[i]; 
    } 
} 

Или если у вас есть C++ 11 или выше, вы можете использовать ranged based for loop как

void Array::fillArray() 
{ 
    for (auto& e : lists) 
    { 
     cin >> e; 
    } 
} 
void Array::printForwards() 
{ 
    for (const auto& e : lists) 
    { 
     cout << e; 
    } 
} 
+0

спасибо! прекрасно работает! действительно ценю это! – Darision

+1

На самом деле 11-й элемент. – immibis

+0

@immibis Ах да. Исправлена. – NathanOliver

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