Klasse get und set Funktionen falsch kodiert?



  • Also hier ist ein Teil meiner Klasse Signal

    class Signal
    {
      private:	 
    	  vector<double>  _Data;
    ....
    
      public:
              vector<double> Data(void)const {return(this->_Data);}
              void SetData(  vector<double> data){this->_Data=data;}
    
    };
    

    Später in main-function möchte ich von einer Datei die Messwerte von mehreren Signale einlesen und mit SetData zu meinem Signal-Objekt zuweisen

    Mein Code gibt kein Fehler aber beim Starten das Programm stürzt ab.
    ALSO ich bin mir sicher , dass ich einen Anfänger Fehler gemacht habe..beim Kodieren von get und set Funktionen für _Data

    #include <algorithm>
    #include <iterator>
    #include <vector>
    #include <string>
    #include <fstream> 
    #include <iostream>
    #include <stdlib.h>
    #include "signal.h"
    
    using namespace std;
    
    inline double stof(const string& in)
    { return atof(in.c_str()); } 
    int main() {	
    
           vector<Signal> VecSig;
    	vector<double> x;
    	vector<string> s;
    	vector<int> idx_channel;
    	string line;
    	std::ifstream infile( "signale_kurz.txt" );
    	//lese die Strings
     std::copy(istream_iterator<string>(infile),istream_iterator<string>(),back_inserter(s));
    	for(int i=0;i<(int)s.size();++i)
    	{
    		if((s[i].find("CHANNEL")!=string::npos))//Wo fängt das neue Channel an??
    		{
    			idx_channel.push_back(i);			
    		}
    	}
    	for(int i=0;i<(int)idx_channel.size();++i)
    	{
    		if(i<(int)idx_channel.size()-1)		std::transform(s.begin()+idx_channel[i],s.begin()+idx_channel[i+1],back_inserter(x),stof);
    		else		std::transform(s.begin()+idx_channel[i],s.end(),back_inserter(x),stof);// der lezte Channel
    		VecSig[i].SetData(x);
    		x.clear();
    	}
    	x=VecSig[0].Data();
    	for(vector<double>::iterator it=x.begin();it!=x.end();++it) cout<<*it<<endl;	
    }
    

    WIe programmiere ich das richtig????

    Danke Carmen



  • Am Ende von main war:

    VecSig[i].SetData(x);
    x.clear();
    

    aber VecSig ist am Anfang leer... mit push_back wird erst mit Leben gefüllt.

    so ist es richtig:

    Signal S;
    S.SetData(x);
    x.clear();
    VecSig.push_back(S);
    

    Carmen


Anmelden zum Antworten