簡體   English   中英

從對象打印 2D int 向量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM