我是一名学习c ++并且在5天内完成课程项目。我花了4个小时研究如何做到这一点,但我还没有想出答案。救救我!
问题。我有一个指向一个包含动态数组的类的指针。我需要获取该数组并将其保存到文件中以便稍后检索。这是我的2个标题和实现。我没有编写“保存到文件”的代码,因为一旦我解决了这个问题,这将很容易。我的问题是它不断打印指针的地址而不是打印数据。
vehReg.h
class vehReg {
public:
/* STUFF */
};
}
#endif
vehData.h
#include "vehReg.h"
using namespace std;
class vehData {
public:
//CONSTRUCTORS
vehData();
//DECONSTRUCTOR
~vehData();
//METHODS
friend ostream &operator<<( ostream &output, const vehData &v);
private:
typedef unsigned long longType;
typedef std::size_t sizeType;
sizeType used,capacity;
vehReg *data;
};
}
#endif
vehData.cpp
//CONSTRUCTOR
vehData::vehData(){
capacity = 5;
used = 0;
data = new vehReg[capacity];
}
//DECONSTRUCTOR
vehData::~vehData(){
delete []data;
}
/* TRYING TO ACCOMPLISH THIS WITH AN OSTREAM OVERLOAD */
void vehData::saveDataSloppy(){
ofstream myFile;
myFile.open ("database.db");
for(int i=0;i<used;i++){
myFile << data[i].getOwnerName() << "|";
myFile << data[i].getVehicleLicense() << "|";
myFile << data[i].getVehicleMake() << "|";
myFile << data[i].getVehicleModel() << "|";
myFile << data[i].getVehicleYear() << "\n";
}
myFile.close();
}
void vehData::saveData(){
cout << data;
}
ostream &operator<<(ostream &stream, const vehData &v){
stream << v.data;
}
}
答案 0 :(得分:2)
v.data
是一个指针,因此它会打印一个指针。你想怎么做?
打印指针指向的任何内容。除了角色
指针,<<
总是打印你给它的东西(格式化为一些
办法)。如果您不希望它打印指针,则给出其他内容。
假设它确实取消了指针的引用。它应该打印什么:一个
vehReg
? 20?指针没有关于大小的信息。如果
你知道,你曾经使用std::vector<vehReg>
(一个更好的选择)
大小,但std::vector
仍然没有超载,因为。{
系统仍然不知道你想如何格式化(逗号分隔?
每个都在新的一行?)。你还没有告诉它如何打印vehReg
任
您显然理解如何重载<<
。首先
你需要做的就是为vehReg
提供过载。
并且必须根据现有的重载来定义两个重载:
std::vector
没有一个,指针的那个没有
你想要什么(而且不能),所以你必须循环你的<<
vehData
并使用您决定的任何分隔符输出每个元素
上。 (如果它是每个元素在它自己的行上,那么你可以使用std::copy
循环的ostream_iterator
,但这可能有点提前
到目前为止你学到了什么。)然后转到<<
vehReg
每个vehReg
。
答案 1 :(得分:0)
v.data
是一个指针,因此它是一个内存地址。
*v.data
是指针指向的东西(在本例中是一个整数)。
例如,
#include <iostream>
using namespace std;
void main () {
int *ptr;
int var = 5;
ptr = &var;
cout << ptr << endl;
cout << *ptr << endl;
system("pause");
}
第一行会打印出类似:0043F930
第二行将打印出来:5
这应该打印出数据数组中保存的元素。
void vehData::showStructure() const {
for (int i = 0; i < capacity: i++) {
cout << data[i];
}
cout << endl;
}