2017-09-04 67 views
-2

在我的程序中,我試圖將當前的鼠標位置設置爲一個點,然後用這些點填充一個數組。這裏是一個小例子,我只設置向量的第0個索引。POINT的C++向量

我得到這個錯誤一旦它擊中pointList[0].x = p.x行;

一個無效的參數被傳遞給一個認爲無效參數致命的函數。

任何幫助表示讚賞。我有一種感覺,這是向量聲明但未初始化的問題?

+2

你是正確的。這是向量被聲明但未初始化的問題。具體而言,'[]'分配給向量中的一個**現有的**元素,並且代碼嘗試將值賦給向量中不存在的元素。顯示的代碼中沒有任何內容實際上向矢量添加任何內容,並且未定義的行爲是由於嘗試分配不存在的矢量元素而產生的。 –

+2

每次獲得新的鼠標位置時都使用'push_back()'。一旦你想檢索點,設置某種for循環。 – CroCo

回答

1

如果要使用operator[]訪問向量,則需要聲明並初始化向量的大小。

例如 -

std::vector<int> myvector (10); // 10 zero-initialized elements 
myvector[0] = 0;     //this is valid 

不然,如果你想動態分配使用push_back()像 -

vector<POINT> pointList; 
POINT p; 
int i = 0; //not required 

while (!GetAsyncKeyState(VK_ESCAPE)) { 

    system("PAUSE"); 
    GetCursorPos(&p); // When key is pressed unpauses and gets position 

    pointList.push_back(p); //entire <POINT> 'p' is inserted into end of the vector. 

    i++; //not required 
} 
+0

還有[std :: vector :: emplace_back](http://en.cppreference.com/w/cpp/container/vector/emplace_back),取決於你的需要..或者'insert'。 –

+0

*如果你想以數組的形式訪問它們,你需要... *這是不正確的。 – CroCo

+0

感謝您指出。現在是否正確? @CroCo –