2016-09-30 21 views
0

我使用存儲點進載體數據類型的代碼如下:顯示值

RECT head; 
    head.left = pt1.x; 
    head.right = pt2.x; 
    head.top = pt1.y; 
    head.bottom = pt2.y; 

    detectBox->push_back(head); 

這個屬於具有一個for循環,其存儲「頭」的multple實例函數內部進入detectBox。此功能delared這樣的:

void GetHeads(cv::Mat Img, vector<RECT>* detectBox) 

凡圖只是被饋送在與已通過其它過程中提取的頭一個正常的黑色和白色圖像。我現在的問題是如何查看已存儲在detectBox中的點?我想在for循環之外訪問它們以用於其他事情。當我嘗試打印出變量IVE只能夠返回地址(0000004FA8F6F31821等)

此外,detectBox是代碼中的灰色陰影(不知道這意味着什麼)。

的完整代碼可以在我與相同的功能,在這裏的其他問題可以找到:

C++ CvSeq Accessing arrays that are stored

----- -----編輯

方法試圖和相關誤差/輸出:

第一:

std::cout << "Back : " << &detectBox->back << std::endl; 

'&':

std::cout << "Back : " << detectBox->back << std::endl; 

'的std ::矢量> ::回':上結合的成員函數表達

二非法操作非標準語法;使用 '&' 創建一個指向成員

三:(注意,沒有錯誤,但沒有有用的信息輸出)

std::cout << "Detect Box : " << detectBox << std::endl; 

檢測箱:00000062BF0FF488

四:

std::cout << "Detect Box : " << &detectBox[1] << std::endl; 

檢測箱:000000CB75CFF108

+0

「打印變量」 - 你是如何打印它們,讓我們來看看多一點你的代碼。 雖然沒有看到它,但我猜你打印的是你傳入的變量的指針而不是矢量的內容。 – UKMonkey

+0

灰色陰影 - 可以是任何東西或沒有,但通常意味着'未使用'。 – UKMonkey

+0

@UKMonkey通過打印變量,我的意思是我只是想用「cout」來找出存儲在 –

回答

1

首先擔心,detectBox是一個指向數組的指針,因此需要在嘗試索引之前先解除引用。

std::cout << (*detectBox)[1]; // Outputs the 2nd RECT in the vector 
           // assuming an operator<< is implemented 
           // for RECT. 

包括「&」操作符的時候,纔打印出第二RECT實例的地址索引1,你不需要做,因爲索引操作給你參考的地址。

std::cout << &(*detectBox)[1]; 

,無需操作人員< <爲RECT實例,它輸出到您需要直接訪問成員流。下面應該工作:

std::cout << "Left: " << (*detectBox)[1].left; 
std::cout << "Right: " << (*detectBox)[1].right; 
std::cout << "Top: " << (*detectBox)[1].top; 
std::cout << "Bottom: " << (*detectBox)[1].bottom; 

這可以通過保存關閉的RECT參考你想獲得第一,然後使用該加以改進:

RECT& secondRect = (*detectBox)[1]; 
std::cout << "Left: " << secondRect.left; 
std::cout << "Right: " << secondRect.right; 
std::cout << "Top: " << secondRect.top; 
std::cout << "Bottom: " << secondRect.bottom; 

最後,我注意到你推Vector的背部有新的RECT,但是你總是輸出矢量中的第二個RECT。假設你要打印的RECT剛剛添加您既可以輸出頭部局部變量或使用後()方法的載體像這樣:

RECT& lastRect = detectBox->back(); 
std::cout << "Left: " << lastRect.left; 
std::cout << "Right: " << lastRect.right; 
std::cout << "Top: " << lastRect.top; 
std::cout << "Bottom: " << lastRect.bottom; 
+0

謝謝,這真的有幫助。在另一個說明中,我將如何查明detectBox中存儲了多少個不同的元素?正如你所展示的,我的想法是循環並顯示所有的向量。我嘗試使用_sizeof(* detectBox)_,但只得到32的答案 –

0
detectBox->push_back(head); 
std::cout << &detectBox[1]; 

除非你有一個重載運算符「< <」爲RECT(你可能沒有)它會嘗試和匹配這是最好的事情是可以,這顯然不會成爲你想要的。

嘗試更多的東西一樣

std::cout << "L: " << &detectBox[1].left << 
      "R: " << &detectBox[1].right << std::endl 

我也可以是你使用[1]時,你可能想要的是->back()

+0

我添加了一些關於我得到的不同錯誤的信息。另外,當我使用.left和.right,因爲你建議它給出了一個錯誤,說明...........「'左'不是'std :: vector ,std :: allocator <_Ty>的成員>'「 –