Cout 向量地址

Cout vector addresses

我是这个网站的新手,对编程有点陌生。我是第一次使用矢量,我想打印它的内容,但我得到的是地址而不是普通单词。除了这个,我不知道该怎么做。

我的向量:

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 '*'
    }
}

为了使其工作,还需要 Componentoperator<< 重载:

ostream& operator<<(ostream &out, const Component &comp)
{
    // print comp values to out as needed...
    return out;
}

推荐阅读:

Operator overloading

您还需要研究一般的指针和引用。

vect 是 Component *(又名组件指针)的向量(又名连续存储块),它是一块内存,其中包含其他内存块的地址,编译器会将其视为组件 class 对象。通过 cout 打印这些地址只会给你一大串无意义的数字。

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

的向量

一旦您开始尝试打印组件而不是它们的地址,您很可能会看到组件没有 << 运算符。你需要写一个。像

std::ostream& operator<<(std::ostream &stream, const Component&component)
{
  stream << component.string_member;
  return stream;
}