[英]Printing a 2D int vector from an object
所以我很確定它有問題,因為它試圖打印指針而不是值,但我不知道如何修復它。
class cName {
private:
std::vector< std::vector<int>> *vect2d;
public:
// initializes vector that contains x number of vectors
// that each contain y number of ints
cName(int x,int y);
void printVector(int);
}
void cName::printVector(int x) {
for(int i=0; i<x; i++) {
//have to get size because
// the number of ints in the vector will change
for(int j=0; j< this->vect2d[i].size(); j++)
std::cout << this->vect2d[i][j]<<" ";
std::cout<<"\n";
}
}
我在打印我正在制作的課程中使用的二維矢量時遇到問題。 我收到一條錯誤消息:
cannot bind 'std::ostream {aka std::basic_ostream<char>'
lvalue to 'std::basic_ostream<char>&&'
有人可以向我解釋為什么向我拋出那個錯誤並幫助我修復它嗎?
vect2d
成員是一個指向整數向量向量的指針。 您在這里並不真正需要指針,只需使用整數向量的向量即可。
使用此指針不會立即產生任何錯誤,因為下標運算符array[index]
可用於指針。 如果您不確定您的代碼是否正確,請首選對std::vector
實例使用范圍檢查的.at(index)
方法。 使用顯式方法會指向您的錯誤,因為沒有.at(index)
指針方法。
當您調用this->vect2d[i].size()
時,編譯器當前看到的是:
this->vect2d
類型vector<vector<int>>*
,一種復雜的拼寫方法vect2d
。 請注意,這是一個指針類型。this->vect2d[i]
類型為vector<vector<int>>
,等同於*(vect2d + i)
,但不等同於(*vect2d)[i]
或vect2d->at(i)
! 請注意,這不是指針類型,而是兩個嵌套向量。.size()
被調用的是矢量i
從你的外在載體尺寸遠*vect2d
容器。 很可能,這是無效的內存,可能會出現段錯誤。 當您稍后執行vect2d[i][j]
,這實際上等效於*(vect2d + i)[j]
,其行為應與(vect2d + i)->at(j)
。 但它不是vect2d->at(i).at(j)
! 值得注意的是,它的類型是vector<int>
而不是int
。 這就是您的錯誤消息的原因:沒有可用的operator<<
來打印向量,因此編譯器會產生非常難以理解的錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.