【发布时间】:2017-06-27 07:10:23
【问题描述】:
我最近开始了一项涉及 cpp 编码的研究,我完全不熟悉,并且遇到了一堆问题:
- 默认构造函数
- 使用对象作为成员变量创建数据结构。
我的程序设置需要是这样的:
- 我需要创建一个数据结构,它的成员变量之一是 Wave 对象数组:Wave[ ]i>
- Wave 实际上是从波形文件中读取的(我的代码链接到一些外部库来执行此操作)
- 每个 Wave 都有一个 GPS 对象。
- 每个 GPS 对象都有大约 15 个 int 或 double 类型的成员变量
这就是我的 GPS.hpp 类的样子 -
#ifndef GPS_HPP_
#define GPS_HPP_
#include <iostream>
#include <fstream>
#include "pulsereader.hpp"
#include "pulsewriter.hpp"
class GPS{
public:
//possible parameters
double gpsTime;
double xAnchor, yAnchor, zAnchor;
double xTarget, yTarget, zTarget;
double xDeviation, yDeviation, zDeviation;
double xFirst, yFirst, zFirst;
double xLast, yLast, zLast;
unsigned char edge;
unsigned char facet;
unsigned char scanDirection;
unsigned char intensity;
PULSEreadOpener pOpener;
PULSEreader *pReader;
PULSEscanner scanner;
GPS();
void setGPSInformation();
void writeToFileGPSInformation(std::string fileName);
};
#endif /* GPS_HPP_ */
This is my GPS.cpp class:
#include <iostream>
#include "GPS.hpp"
//Default constructor
GPS::GPS(){
// enter default values
xAnchor = 0;
yAnchor = 0;
zAnchor = 0;
xTarget = 0;
yTarget = 0;
zTarget = 0;
xFirst = 0;
yFirst = 0;
zFirst = 0;
xLast = 0;
yLast = 0;
zLast = 0;
edge = 0;
facet = 0;
scanDirection = 0;
intensity = 0;
}
void GPS::setGPSInformation(){
gpsTime = pReader->pulse.get_t();
// Compute anchor, target and direction
pReader->pulse.compute_anchor_and_target_and_dir();
xAnchor = pReader->pulse.get_anchor_x();
yAnchor = pReader->pulse.get_anchor_y();
zAnchor = pReader->pulse.get_anchor_z();
xTarget = pReader->pulse.get_target_x();
yTarget = pReader->pulse.get_target_y();
zTarget = pReader->pulse.get_target_z();
// Compute first and last returning Values
pReader->pulse.compute_first_and_last();
xFirst = pReader->pulse.get_first_x();
yFirst = pReader->pulse.get_first_y();
zFirst = pReader->pulse.get_first_z();
xLast = pReader->pulse.get_last_x();
yLast = pReader->pulse.get_last_y();
zLast = pReader->pulse.get_last_z();
edge = pReader->pulse.edge_of_scan_line;
scanDirection = pReader->pulse.scan_direction;
facet = pReader->pulse.mirror_facet,
intensity = pReader->pulse.intensity;
}
/*
* Writes all GPS information to a csv file
*/
void GPS::writeToFileGPSInformation(std::string fileName){
long long pulseIndex = 0;
FILE *scanout;
scanout = fopen("gps.csv", "w");
fprintf(scanout, "Pulse Index, GPS Time, X Anchor, Y Anchor, Z Anchor, \
X Target, Y Target, Z Target, X First, \
Y First, Z First, X Last, Y Last, Z Last, \
edge, Scan Direction, facet, intensity\n");
pOpener.set_file_name(fileName.c_str());
pReader = pOpener.open();
pReader->seek(0);
while(pReader->read_pulse()) {
gpsTime = pReader->pulse.get_t();
pReader->pulse.compute_anchor_and_target_and_dir();
xAnchor = pReader->pulse.get_anchor_x();
yAnchor = pReader->pulse.get_anchor_y();
zAnchor = pReader->pulse.get_anchor_z();
xTarget = pReader->pulse.get_target_x();
yTarget = pReader->pulse.get_target_y();
zTarget = pReader->pulse.get_target_z();
pReader->pulse.compute_first_and_last();
xFirst = pReader->pulse.get_first_x();
yFirst = pReader->pulse.get_first_y();
zFirst = pReader->pulse.get_first_z();
xLast = pReader->pulse.get_last_x();
yLast = pReader->pulse.get_last_y();
zLast = pReader->pulse.get_last_z();
edge = pReader->pulse.edge_of_scan_line;
scanDirection = pReader->pulse.scan_direction;
facet = pReader->pulse.mirror_facet,
intensity = pReader->pulse.intensity;
fprintf(scanout, "%lld,%.8lf, \
%lf,%lf,%lf, \
%lf,%lf,%lf, \
%lf,%lf,%lf, \
%lf,%lf, %lf, \
%d,%d,%d,%d,\n",
pulseIndex, gpsTime,
xAnchor, yAnchor, zAnchor,
xTarget, yTarget, zTarget,
xFirst, yFirst, zFirst,
xLast, yLast, zLast,
edge, scanDirection, facet, intensity) ;
pulseIndex++;
}
}
这是我的 GPS.cpp:
#include <iostream>
#include "GPS.hpp"
//Default constructor
GPS::GPS(){
// enter default values
xAnchor = 0;
yAnchor = 0;
zAnchor = 0;
xTarget = 0;
yTarget = 0;
zTarget = 0;
xFirst = 0;
yFirst = 0;
zFirst = 0;
xLast = 0;
yLast = 0;
zLast = 0;
edge = 0;
facet = 0;
scanDirection = 0;
intensity = 0;
}
void GPS::setGPSInformation(){
gpsTime = pReader->pulse.get_t();
// Compute anchor, target and direction
pReader->pulse.compute_anchor_and_target_and_dir();
xAnchor = pReader->pulse.get_anchor_x();
yAnchor = pReader->pulse.get_anchor_y();
zAnchor = pReader->pulse.get_anchor_z();
xTarget = pReader->pulse.get_target_x();
yTarget = pReader->pulse.get_target_y();
zTarget = pReader->pulse.get_target_z();
// Compute first and last returning Values
pReader->pulse.compute_first_and_last();
xFirst = pReader->pulse.get_first_x();
yFirst = pReader->pulse.get_first_y();
zFirst = pReader->pulse.get_first_z();
xLast = pReader->pulse.get_last_x();
yLast = pReader->pulse.get_last_y();
zLast = pReader->pulse.get_last_z();
edge = pReader->pulse.edge_of_scan_line;
scanDirection = pReader->pulse.scan_direction;
facet = pReader->pulse.mirror_facet,
intensity = pReader->pulse.intensity;
}
/*
* Writes all GPS information to a csv file
*/
void GPS::writeToFileGPSInformation(std::string fileName){
long long pulseIndex = 0;
FILE *scanout;
scanout = fopen("gps.csv", "w");
fprintf(scanout, "Pulse Index, GPS Time, X Anchor, Y Anchor, Z Anchor, \
X Target, Y Target, Z Target, X First, \
Y First, Z First, X Last, Y Last, Z Last, \
edge, Scan Direction, facet, intensity\n");
pOpener.set_file_name(fileName.c_str());
pReader = pOpener.open();
pReader->seek(0);
while(pReader->read_pulse()) {
gpsTime = pReader->pulse.get_t();
pReader->pulse.compute_anchor_and_target_and_dir();
xAnchor = pReader->pulse.get_anchor_x();
yAnchor = pReader->pulse.get_anchor_y();
zAnchor = pReader->pulse.get_anchor_z();
xTarget = pReader->pulse.get_target_x();
yTarget = pReader->pulse.get_target_y();
zTarget = pReader->pulse.get_target_z();
pReader->pulse.compute_first_and_last();
xFirst = pReader->pulse.get_first_x();
yFirst = pReader->pulse.get_first_y();
zFirst = pReader->pulse.get_first_z();
xLast = pReader->pulse.get_last_x();
yLast = pReader->pulse.get_last_y();
zLast = pReader->pulse.get_last_z();
edge = pReader->pulse.edge_of_scan_line;
scanDirection = pReader->pulse.scan_direction;
facet = pReader->pulse.mirror_facet,
intensity = pReader->pulse.intensity;
fprintf(scanout, "%lld,%.8lf, \
%lf,%lf,%lf, \
%lf,%lf,%lf, \
%lf,%lf,%lf, \
%lf,%lf, %lf, \
%d,%d,%d,%d,\n",
pulseIndex, gpsTime,
xAnchor, yAnchor, zAnchor,
xTarget, yTarget, zTarget,
xFirst, yFirst, zFirst,
xLast, yLast, zLast,
edge, scanDirection, facet, intensity) ;
pulseIndex++;
}
}
这是我目前用来将 GPS 信息写入 csv 的驱动程序类。
#include <iostream>
#include "CmdLine.hpp"
#include "ScannerInformation.hpp"
#include "GPS.hpp"
using namespace std;
int main (int argc, char *argv[]){
CmdLine cmdLineArgs;
cmdLineArgs.parse(argc,argv);
if(cmdLineArgs.printUsageMessage == true){
std::cout << cmdLineArgs.getUsageMessage() << std::endl;
}
else{
std::string fileName = cmdLineArgs.getInputFileName();
ScannerInformation scannerInfo;
scannerInfo.writeToFileScannerInformation(fileName);
GPS gpsInfo;
gpsInfo.writeToFileGPSInformation(fileName);
}
return 0;
}
除了将 GPS 信息写入 CSV 之外,我还希望能够在我的驱动程序类中访问每个 Wave 的 gps 信息(类似这样)-
std::cout << wave.gpsInfo.xAnchor;
如何编写我的 Wave.hpp 和 cpp 以使其具有 GPS 对象作为其成员变量,然后如何从我的驱动程序文件中访问波形对象的 gps 信息?
#include "GPS.hpp"
class Wave {
private:
GPS gps;
public:
//What kind of methods would I use here?
};
【问题讨论】:
-
private:,public:在全球范围内?? -
这并不接近编译。这是你的真实代码吗?看看MCVE
-
很抱歉,我是 stackoverflow 和 c++ 的新手,我还在忙着解决问题。我已经编辑了这个问题,使其更加准确,并包含了额外的代码。任何帮助将不胜感激。
标签: c++ object data-structures constructor