如何解决C ++程序打印出地址而不是值
我有一个程序,该程序通过结构接收信息并将其放入向量中,而我试图打印出该信息,但获取地址。该结构应正确保存值,因此我认为这是我的指针还是打印出来的方式。
#include <iostream>
#include <cstring>
#include<vector>
using namespace std;
struct student
{
char* fName;
char* lName;
int id;
float gpa;
};
void add(vector<student*>*);
int main()
{
vector <student*>* list = new vector<student*>();
if (strcmp(cmd,"ADD") == 0)
{
add(list);
}
else if (strcmp(cmd,"PRINT") == 0)
{
for(vector<student*>::iterator i = list->begin(); i != list->end(); i++)
{
cout << *i;
}
cout << "print" << endl;
}
}
void add(vector<student*>* paramlist)
{
student* s = new student();
s->fName = new char[25];
s->lName = new char[25];
cout << "Enter first name" << endl;
cin >> s->fName;
cout << "Enter last name" << endl;
cin >> s->lName;
cout << "Enter id number" << endl;
cin >> s->id;
cout << "Enter GPA" << endl;
cin >> s->gpa;
paramlist->push_back(s);
}
或者可能与我遍历向量的方式有关。
解决方法
您需要为结构添加操作符重载,以定义结构在打印时应如何显示。您还需要取消引用指针以及迭代器。
// Define how the struct should look when printed.
// This function makes it appear like:
// Name: John Smith,ID: 1235,GPA: 4.0
std::ostream &operator<<(std::ostream &os,const student &val) {
os
<< "Name: " << val.fname << " " << val.lname
<< ",ID: " << val.id
<< ",GPA: " << val.gpa
<< endl;
return os;
}
然后再...
for(vector<student*>::iterator i = list->begin(); i != list->end(); i++)
{
// Dereference twice,once for the iterator,and again for the pointer.
cout << **i << endl;
}
,
您必须两次取消引用**i
。
使用*i
,您可以获得vector student*
。
您得到student
,您需要其他*
。
您可以使用for (auto i: list)
来简化生活。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。