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 '*'
}
}
为了使其工作,还需要 Component
的 operator<<
重载:
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;
}
我是这个网站的新手,对编程有点陌生。我是第一次使用矢量,我想打印它的内容,但我得到的是地址而不是普通单词。除了这个,我不知道该怎么做。
我的向量:
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 '*'
}
}
为了使其工作,还需要 Component
的 operator<<
重载:
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;
}