2016-03-06 57 views
1

林目前正在opencv的3.0 C++在Xcode 7.2。我已經和代碼錯誤書面的OpenCV 3.0墊不提供標操作

Variable length array of non-POD element type cv::Mat 

示例代碼被定義如下

Mat symbol[opts.numofblocksX*opts.numofblocksY]; 

我的代碼更改爲

Mat symbol = symbol[opts.numofblocksX * opts.numofblocksY]; 

,並顯示另一個錯誤

cv::Mat doest not provide a subscript operator 

是否有任何人面對日同樣的問題呢?我可以在這裏實施什麼解決方案?

由於

+0

你到底想幹什麼?如果你想創建Mat'的'一個數組,你可以這樣做:'標準::矢量符號(HOW_MANY);' – Miki

回答

0

此代碼:

cv::Mat symbol[opts.numofblocksX*opts.numofblocksY]; 

定義的Mat的規模opts.numofblocksX*opts.numofblocksY的陣列。

你得到的錯誤是因爲此數組的大小不固定在編譯的時候,這是不是一個POD type

你的新代碼是有缺陷的。

cv::Mat symbol = symbol[opts.numofblocksX * opts.numofblocksY]; 

這定義了單個Mat稱爲符號,然後胡說試圖與opts.numofblocksX * opts.numofblocksY調用操作符[]上它作爲參數。這不是聲明一個數組。

兩個顯而易見的選擇出現了:

  • 分配上heap,其中可變大小的分配是允許你的陣列。不要忘記delete[]! (或者使用智能指針)

    cv::Mat *symbol = new cv::Mat[opts.numofblocksX * opts.numofblocksY];

  • 使用一個std ::向量(推薦):

    std::vector<cv::Mat> symbols(opts.numofblocksX * opts.numofblocksY]);