簡體   English   中英

cpp使用向量編譯錯誤初始化二維數組

[英]cpp initialize 2-D array using vectors compilation error

我想使用構造函數中的初始化列表初始化二維數組m_field。 就像在該線程中在類C ++中創建二維矢量一樣 ,但是出現以下錯誤。

BoardData.h

#ifndef BOARDDATA_H
#define BOARDDATA_H

#include <vector>

class BoardData
{
    public:
    /** Default constructor */
    BoardData(int rows, int cols);
    /** Default destructor */
    virtual ~BoardData();
    protected:
    private:
    std::vector< std:vector<int> > m_field;

};


#endif // BOARDDATA_H

BoardData.cpp

#include "BoardData.h"

BoardData::BoardData(int rows, int cols) :
                     m_field(rows, std::vector<int>(cols,0))
{
    //ctor
}

BoardData::~BoardData()
{
    //dtor
}

編譯器輸出: (gcc版本4.6.3)

BoardData.h|18|error: template argument 1 is invalid|
BoardData.h|18|error: template argument 2 is invalid|
BoardData.cpp||In constructor ‘BoardData::BoardData(int, int)’:|
BoardData.cpp|4|error: expression list treated as compound expression in mem-initializer [-fpermissive]|
BoardData.cpp|4|warning: left operand of comma operator has no effect [-Wunused-value]|
BoardData.cpp|4|error: cannot convert ‘std::vector<int>’ to ‘int’ in initialization|
||=== Build finished: 4 errors, 1 warnings ===|
std::vector< std:vector<int> > m_field;

應該

std::vector< std::vector<int> > m_field;
                 ^

我同意這不是一個非常有用的錯誤消息...

而不是解決此編譯錯誤,您應該調整設計。 矩形數組通常不應存儲為向量的向量,而應存儲為將以2D方式索引的單個向量。 您可以為此使用現有的庫,例如Boost.Matrix,也可以自己實現它:

m_field(rows*cols) // initialize
m_field[row + rows*col] // index

您可以提供自己的方法來按行和列進行索引以確保安全。 最后,這將比矢量方法更有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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