[英]Cout vector addresses
我是這個網站的新手,編程方面也有些新手。 我第一次使用vector,我想打印它的內容,但是我得到的是地址而不是普通的單詞。 除此以外,我不知道該如何做。
我的向量:
vector<Component*> vect;
和我的打印代碼:
void Frame::print() {
for (int i = 0; i < vect.size(); i++)
cout << vect[i] << endl;
}
您將指針存儲在向量中。 指針的值是一個內存地址,因此您在輸出中看到的是地址。 您需要取消引用指針才能訪問實際的Component
對象:
void Frame::print()
{
for (int i = 0; i < vect.size(); i++)
{
Component *component = vect[i];
cout << *component << endl; // <-- not the extra '*'
}
}
為了使其正常工作,還需要為operator<<
重載Component
:
ostream& operator<<(ostream &out, const Component &comp)
{
// print comp values to out as needed...
return out;
}
推薦閱讀:
您還通常需要研究指針和引用。
vect是Component *(又稱Component指針)的向量(也就是一堆連續存儲),它是一塊內存,其中包含其他內存塊的地址,編譯器將其視為Component類對象。 通過cout打印這些地址只會給您一大堆毫無意義的數字。
我懷疑您想做的可能根本不存儲組件指針的向量,而只存儲組件的向量。 如今,除非您確切地知道自己在做什么,否則在C ++中存儲原始指針已不那么受歡迎了。 如果確實需要指針,則應使用std :: unique_ptr和std :: make_unique的向量。
一旦開始嘗試打印組件而不是它們的地址,您很可能會看到沒有<<運算符。 您將需要寫一個。 就像是
std::ostream& operator<<(std::ostream &stream, const Component&component)
{
stream << component.string_member;
return stream;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.