Я получил класс WayPoint, который содержит пару чисел и имя.Я получил класс WayPointContainer, который содержит вектор Waypoints.
WayPointContainer получил метод для добавления WayPoint к своему вектору и метод Print для отображения WayPoints внутри вектора.Я реализовал оба, но не знаю, как проверить, работает ли он.Мой метод печати не печатает никакое WayPointName.Так что мой метод Add или мой метод Print неправильный.
Так что, как только я вызову метод Add c1-> Add (* p1) из WayPointContainer программа останавливается.я попробовал другую версию, используя insert () вектора с итератором.Я также пытался напечатать емкость, но каждый метод просто приводит к остановке программы, так что я думаю, что-то с инициализацией не так?Я получил заголовочные файлы от своего профессора, так что я надеюсь, что они правильные.И так как он не отвечает мне, я пробую это здесь.
Я пытаюсь отладить это, но я нахожу информацию, предоставленную отладкой, действительно трудной для чтения и использования.Я также пробовал разные реализации методов, но это всегда был один и тот же результат.
WayPoint.h
#ifndef WAYPOINT_H_
#define WAYPOINT_H_
#include <iostream>
namespace HHN {
class WayPoint {
private:
std::string name{ "" };
std::pair<double, double> coords{ 0.0, 0.0 };
public:
WayPoint();
virtual ~WayPoint();
WayPoint(const WayPoint& orig);
WayPoint(const std::string& xName, double xCoord, double yCoord);
WayPoint& operator=(const WayPoint& rhs);
std::string Name() const;
double first() const;
double second() const;
};
} /* namespace HHN */
#endif /* WAYPOINT_H_ */
WayPoint.cpp
#include "WayPoint.h"
namespace HHN {
WayPoint::WayPoint() {}
WayPoint::~WayPoint() {}
WayPoint::WayPoint(const WayPoint& orig) {}
WayPoint::WayPoint(const std::string& xName, double xCoord, double yCoord) {
this->name = xName;
this->coords.first = xCoord;
this->coords.second = yCoord;
}
WayPoint& WayPoint::operator =(const WayPoint& rhs) {
if (this == &rhs) {
return *this;
}
else {
this->coords.first = rhs.first();
this->coords.second = rhs.second();
this->name = rhs.Name();
}
return *this;
}
std::string WayPoint::Name() const {
return name;
}
double WayPoint::first() const {
return this->coords.first;
}
double WayPoint::second() const {
return this->coords.second;
}
} /* namespace HHN */
WayPointContainer.h
#include <vector>
#include <iostream>
#include "WayPoint.h"
#ifndef WAYPOINTCONTAINER_H_
#define WAYPOINTCONTAINER_H_
class WayPointContainer {
private:
std::vector<HHN::WayPoint>* pContainer{nullptr};
public:
WayPointContainer();
WayPointContainer(const WayPointContainer& orig);
virtual ~WayPointContainer();
WayPointContainer& operator=(const WayPointContainer& rhs);
HHN::WayPoint& operator[](int idx) const;
void Add(const HHN::WayPoint& arg);
int Size() const;
void Print() const;
};
#endif /* WAYPOINTCONTAINER_H_ */
WayPointContainer.cpp
#include "WayPointContainer.h"
#include <vector>
#include <iostream>
using namespace std;
WayPointContainer::WayPointContainer() {
pContainer = new std::vector<HHN::WayPoint>;
}
WayPointContainer::WayPointContainer(const WayPointContainer& orig) {
pContainer = orig.pContainer;
}
WayPointContainer::~WayPointContainer() {
delete[] pContainer;
}
WayPointContainer& WayPointContainer::operator =(const WayPointContainer& rhs) {
if (this == &rhs) {
return *this;
}
else {
pContainer = rhs.pContainer;
}
return *this;
}
HHN::WayPoint& WayPointContainer::operator [](int idx) const {
return (*pContainer)[idx];
}
void WayPointContainer::Add(const HHN::WayPoint& arg) {
this->pContainer->push_back(arg);
}
int WayPointContainer::Size() const {
return pContainer->size();
}
void WayPointContainer::Print() const {
for (auto waypoint = pContainer->begin(); waypoint != pContainer->end(); ++waypoint) {
auto tmp = waypoint->Name();
cout << tmp << " <- Name" << "\n";
}
}
Main.cpp
#include <iostream>
using namespace std;
#include "WayPoint.h"
#include "WayPointContainer.h"
int main() {
cout << "!!!Hello World!!!" << endl;
HHN::WayPoint *p1 = new HHN::WayPoint("nameOfP1",1.5,1.5); // works
HHN::WayPoint *p2(p1); // works
WayPointContainer *c1 = new WayPointContainer(); // works
WayPointContainer *c2(c1); // works
WayPointContainer *c3 = new WayPointContainer();
c1->Add(*p1);
c1->Print();
cout << " Punkt1: " << p1->Name() << " "<< p1->first() << " " << p1->second() << "\n";
cout << "!!!Hello World out!!!" << endl;
return 0;
}
Вывод на консоль, который я получаю:
!!!Hello World!!!
<- Name
Punkt1: nameOfP1 1.5 1.5
!!!Hello World out!!!
, ноя ожидаю
!!!Hello World!!!
nameOfP1 <- Name
Punkt1: nameOfP1 1.5 1.5
!!!Hello World out!!!
(На самом деле это задача моего профессора реализовать указанные файлы заголовков. И поскольку он до сих пор игнорировал мои письма, я пробую это здесь. Я почти уверен, что это что-то оченьмаленький и, вероятно, очевидный для исправления, но я очень начинающий в C ++ и много борюсь. Я уже несколько дней сижу на этой реализации.)