Я совершенно новичок в c ++ в целом, но определенно новичок в классе topi c и так далее, и я обнаружил проблему, которая никак не может быть решена. Чтение подобных постов мне не помогло, поэтому я решил спросить Вас. Мне нужно два класса (на данный момент, по крайней мере, один рабочий ...) в каждом из них конструктор, который будет создавать вектор моих структур и загружать в него данные из файла .txt. У меня это работало в немного другой конфигурации, где не было классов и структур, которые были определены чуть выше основного веселья c, все в одном файле, но теперь я застрял. Некоторые «cout» предоставляют мне информацию о том, где выполняется код, и где бы он ни был.
Скажите, что мне нужен класс со структурой внутри (ниже приведен только пример), вектор этих структур и конструктор, который заполняет вектор значениями из файла .txt. Я перегрузил оператор из std :: istream и использовал функцию getData для чтения файла, и он работал нормально, пока я не поместил все в класс, поэтому я верю, что проблема где-то в операторе перегрузки друга (??? - не уверен, как вызвать это правильно). Я вставляю весь код ниже.
main. cpp
#include <iostream>
#include <vector>
#include <string>
#include <iterator>
#include <fstream>
#include <math.h>
#include "PointCoord.hpp"
int main()
{
std::string hf_fileName = "DIT_hf_xy.txt";
std::string If_fileName = "DIT_If_xy.txt";
std::string coef_fileName = "constants.txt ";//"constants.txt";
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
PointCoord hf("HF method",hf_fileName);
std::cout<< hf.getName();
hf.printVec();
return 0;
}
PointCoord.hpp
#ifndef POINTCOORD_H
#define POINTCOORD_H
#include<vector>
#include<string>
#include<istream>
class PointCoord
{
public:
struct st_point
{
double x;
double y;
}Point;
void getData(std::string m_filename);//,std::vector<PointCoord::st_point> &data);
PointCoord(std::string m_name, std::string m_filename);
void printVec();
std::string getName();
friend std::istream& operator>>(std::istream& is, PointCoord::st_point& Point);
private:
std::string name;
std::vector<st_point> dataVec;
};
#endif // POINTCOORD_H
PointCoord. cpp
#include "PointCoord.hpp"
#include <iostream>
#include <fstream>
#include <iterator>
#include <string>
PointCoord::PointCoord(std::string m_name, std::string m_filename)
:name(m_name)
{
PointCoord::getData(m_filename);//,dataVec);
std::cout<<"File " + m_filename + " loaded." <<std::endl;
}
std::istream& operator
>>(std::istream& is, PointCoord::st_point& Point)
{
is >> Point.x >> Point.y;
return is;
}
void PointCoord::getData(std::string m_filename)//,std::vector<PointCoord::st_point> &data)
{
std::cout << "getData1" << std::endl;
std::ifstream ifs(m_filename);
if (ifs) {
std::cout << "getData2" << std::endl;
std::copy(std::istream_iterator<st_point>(ifs),
std::istream_iterator<st_point>(),
std::back_inserter(dataVec));
std::cout << "getData3" << std::endl;
//std::cout << data.back().x << std::endl;
}
else {
std::cerr << "Couldn't open " << m_filename << " for reading\n";
}
}
void PointCoord::printVec()
{
std::cout<< "Parametry, rozmiar wektora:" <<dataVec.size() <<std::endl;
for (int i=0; i<dataVec.size();i++)
std::cout << "x = " << dataVec[i].x << ", y = " <<dataVec[i].y << std::endl ;
}
std::string PointCoord::getName()
{
return name;
}
Пример файла для чтения: -10,0224 3,1909 -9,9096 3,199 -9,7788 3,2109 -9, 7072 3,22E-09 -9,5994 3,24E-09 -9,491 3,26E-09 -9,393 3,28E-09 -9,3098 3,29E-09 -9,2104 3,32E-09 -9, 1008 3,34E-09 -8,9918 3,36E-09 -8,8952 3,38E-09 -8,792 3,40E-09 -8,729 3,42E-09 -8,5822 3,44E-09 -8, 5034 3,46E-09 -8,4136 3,49E-09 -8,2986 3,51E-09 -8,1934 3,53E-09
В качестве вывода я получаю все команды, кроме вектора пусто, несмотря на вызов функции getData. Надеюсь, вы дадите мне подсказку.
Спасибо