簡體   English   中英

Cout向量地址

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

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