2016-02-04 70 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

我試着用Google搜索這個問題,所以爲什麼我在這裏發佈。 – Darision

+0

我以爲它會自動初始化類數組大小的每個實例爲10(0-9) – Darision

回答

3

lists[10];不會創建矢量o 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) {} 

你也應該改變你的for循環來使用矢量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