Cout矢量地址

时间:2017-04-19 20:31:13

标签: c++ vector printing cout

我是这个网站的新手,还有一些新的编程方式。我是第一次使用矢量而且我想打印它的内容,但我得到的是地址而不是普通的单词。我不知道如何用其他方式做到这一点。

我的载体:

vector<Component*> vect;

和我的打印代码:

void Frame::print() {
    for (int i = 0; i < vect.size(); i++)
        cout << vect[i] << endl;
}

2 个答案:

答案 0 :(得分:2)

您正在向量中存储指针。指针的值是内存地址,因此您在输出中看到地址。您需要取消引用指针以访问实际的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;
}

推荐阅读:

Operator overloading

你还需要研究一般的指针和参考文献。

答案 1 :(得分:1)

vect是Component *(也称为Component指针)的向量(也称为连续存储块),它是一块内存块,带有其他内存块的地址,编译器将其视为Component类对象。通过cout打印这些地址只会给你一个无意义的数字列表。

我怀疑你想要做的可能根本不是存储组件指针的向量而只是存储组件的向量。如今,除非你确切地知道自己在做什么,否则它现在在C ++中不赞成存储原始指针。如果你真的想要指针,你应该使用std :: unique_ptr和std :: make_unique的向量。

一旦你开始尝试打印组件而不是它们的地址,你很可能会发现没有&lt;&lt;组件的运算符。你需要写一个。像

这样的东西
std::ostream& operator<<(std::ostream &stream, const Component&component)
{
  stream << component.string_member;
  return stream;
}