Problem beim nutzen von vectoren und dem schreiben in eine datei



  • Hi,

    der tag geht ja nie zu ende ohne Probleme naja jetzt hab ich ein Problem was ich nur mit extrem viel code aufzeigen kann also hoffe das ok weil das problem besteht in 3 datein in meiner main.cpp meiner VTKWriter.cpp und VTKWriter.h also es ist folgendes das was ich auskommentiert hab im folgendem code das hab das funktioniert und ist ja das selbe wie des line, lines,.... ist auch nur kopiert und mein porblem ist wie ich die zusammen bekomme weil wenn ich die kommentarzeichen wegmach dann gibts 2 errors

    also erstmal die quellcodes

    main.cpp

    #include <fstream>
    #include <iostream> 
    #include <string>
    #include "VTKWriter.h"
    #include "Point.h"
    
    using namespace std;
    
    int main ( )
    {
    
    	VTKWriter wr("C:/hallo.vtk",2,true,"Example");
    
    	std::vector<Point> points;
    
    	points.push_back(Point(10,0,0));
    	points.push_back(Point(30,0,0));
    	points.push_back(Point(30,20,0));
    	points.push_back(Point(0,20,0));
    	points.push_back(Point(10,0,0));
    /*
    	std::vector<int> poly1;
    	poly1.push_back(0);
    	poly1.push_back(1);
    	poly1.push_back(2);
    
    	std::vector<int> poly2;
    	poly2.push_back(3);
    	poly2.push_back(4);
    
    	std::vector<std::vector<int> > polygons;
    	polygons.push_back(poly1);
    	polygons.push_back(poly2);	
    */
    
    	std::vector<int> line1;
    	line1.push_back(0);
    	line1.push_back(1);
    	line1.push_back(2);
    
    	std::vector<int> line2;
    	line2.push_back(3);
    	line2.push_back(4);
    
    	std::vector<std::vector<int> > lines;
    	lines.push_back(line1);
    	lines.push_back(line2);	
    
    //	wr.writePolygons(points,polygons);
    	wr.writeLines(points,lines);
    }
    

    VTKWriter.cpp

    #include "VTKWriter.h"
    #include "Point.h"
    #include <fstream>
    #include <iostream> 
    
    VTKWriter::VTKWriter(QString strFilename, int nVersion, bool bAscII, QString strName)
    {
        m_strFilename  = strFilename;
    
    	m_nVersion = nVersion;
    
    	m_bAscII = bAscII;
    
    	m_strName = strName;
    
    	m_pFile = NULL;
    
    	m_pStream = NULL;
    
    	open();
    
    	writeHeader();
    
    }
    
    VTKWriter::~VTKWriter(void)
    {
    	m_pFile->close();
    }
    
    bool
    VTKWriter::open()
    {
      m_pFile = new QFile(m_strFilename);
    
      if (!(m_pFile->open(QIODevice::ReadWrite)))
      {
        delete m_pFile;
    
        m_pFile = NULL;
    
        return false;
      }
    
      m_pStream = new QTextStream(m_pFile);
    
      return true;
    }
    
    QString 
    VTKWriter::getFilename(void) const
    {
       return m_strFilename;
    }
    
    void 
    VTKWriter::writeHeader(void)
    {
      (*m_pStream) << "# vtk DataFile Version " << m_nVersion << ".0\n";
    
      (*m_pStream) << m_strName << " \n";
    
       if (m_bAscII)
      {
    	  (*m_pStream) <<"ASCII \n";  
      }
      else
      {
         (*m_pStream) <<  "BINARY \n";
      }
    
    }
    
    /*
    void 
    VTKWriter::writePolygons(std::vector<Point> vecPoints, std::vector< std::vector< int > > vecPolygons )
    {
    	(*m_pStream) << "DATASET " << "POLYDATA\n";
    
    	writePointSection(vecPoints);	
    
    	writePolygonSection(vecPolygons);	
    }
    */
    void 
    VTKWriter::writeLines(std::vector<Point> vecPoints, std::vector< std::vector< int > > vecLines )
    {
    	(*m_pStream) << "DATASET " << "POLYDATA\n";
    
    	writePointSection(vecPoints);	
    
    	writeLineSection(vecLines);	
    }
    
    void 
    VTKWriter::writePointSection(std::vector<Point> vecPoints)
    {
    	int nPoints = vecPoints.size();
    
    	(*m_pStream) << "POINTS " << nPoints << " float\n";
    
    	for(int i=0; i< nPoints;i++)
    	{
    		Point p =  vecPoints[i];		
    		(*m_pStream) << p.x << " " << p.y << " " << p.z << "\n";
    
    	} 
    }
    /*
    void 
    VTKWriter::writePolygonSection(std::vector< std::vector< int > > vecPolygons )
    {
    	int nNumberOfEtries = 0;
    
    	for(int i=0;i< vecPolygons.size(); i++)
    	{
    		nNumberOfEtries += 1 + vecPolygons[i].size();	
    	}
    
    	(*m_pStream) << "POLYGONS " << vecPolygons.size() << " " << nNumberOfEtries << "\n";
    
    	for(int i=0;i< vecPolygons.size(); i++)
    	{
    		(*m_pStream) << vecPolygons[i].size();
    
    		for(int j=0; j < vecPolygons[i].size();j++)
    		{
    			(*m_pStream) << " " << vecPolygons[i][j];		
    		}
    		(*m_pStream) << "\n";
    	}
    */
    
    void 
    VTKWriter::writeLineSection(std::vector< std::vector< int > > vecLines )
    {
    	int nNumberOfEtries = 0;
    
    	for(int i=0;i< vecLines.size(); i++)
    	{
    		nNumberOfEtries += 1 + vecLines[i].size();	
    	}
    
    	(*m_pStream) << "LINES " << vecLines.size() << " " << nNumberOfEtries << "\n";
    
    	for(int i=0;i< vecLines.size(); i++)
    	{
    		(*m_pStream) << vecLines[i].size();
    
    		for(int j=0; j < vecLines[i].size();j++)
    		{
    			(*m_pStream) << " " << vecLines[i][j];		
    		}
    		(*m_pStream) << "\n";
    	}
    }
    

    VTKWriter.h

    #include <qstring.h>
    #include <QtCore/QTextStream>
    #include <qfile.h>
    #include <vector>
    #include "Point.h"
    
    class VTKWriter
    {
    
    public:
    
    	VTKWriter(QString strFilename, int nVersion, bool bAscII, QString strName);
    
    	~VTKWriter(void);
    
    	bool open(void);
    
    	QString getFilename(void) const;
    
    	/*void writePolygons(std::vector<Point> vecPoints, std::vector< std::vector< int > > vecPolygons );*/
    	void writeLines(std::vector<Point> vecPoints, std::vector< std::vector< int > > vecLines );
    
    private:	
    
    	void writePointSection(std::vector<Point> vecPoints);
    
    	/*void writePolygonSection(std::vector< std::vector< int > > vecPolygons );*/
    
    	void writeLineSection(std::vector< std::vector< int > > vecLines );
    
    	void writeHeader(void);
    
    	int m_nVersion;
    
    	bool m_bAscII;
    
    	QString m_strName;
    
    	QFile* m_pFile;
    
    	QTextStream* m_pStream;
    
    	QString m_strFilename;
    
    };
    

    naja war jetzt sehr viel

    also die frage ist wie ich das auskommentierte in das program einbinden kann



  • Es gibt 2 Errors? Dann poste die doch mal. Ist auf jeden Fall vielversprechender als 250 Zeilen Code verstehen.

    gruß
    Martin



  • dachte halt das es reichen würde wenn man meine anvorderung weis also das zusammenführen vom programm mit den auskommentierten zeilen aber errors kommen jetzt wenns hilft

    line 165
    fatal error C1075: end of file found before the left brace'{at'pfad....(120' was matched

    2ter
    line 144
    error C2601: 'VTKWriter::writeLineSection' : local function definitions are illegal

    errors sind in der VTKWriter datei



  • GT schrieb:

    dachte halt das es reichen würde wenn man meine anvorderung weis also das zusammenführen vom programm mit den auskommentierten zeilen aber errors kommen jetzt wenns hilft

    line 165
    fatal error C1075: end of file found before the left brace'{at'pfad....(120' was matched

    2ter
    line 144
    error C2601: 'VTKWriter::writeLineSection' : local function definitions are illegal

    errors sind in der VTKWriter datei

    Hat beides die Ursache darin, dass Du irgendwo (vor Zeile 144) eine Klammerebene aufgemacht hast, die Du vergessen hast zu schließen.

    Gruß,

    Simon2.



  • GT schrieb:

    line 165
    fatal error C1075: end of file found before the left brace'{at'pfad....(120' was matched

    --> In Zeile 140 eine } vergessen.

    Dadurch sollte der 2. Fehler auch beseitigt werden.



  • Genial Klasse 👍 geht jetzt danke

    ähm dann noch ne frage das habt ihr aus dem 120 rausgelesen?

    line 165
    fatal error C1075: end of file found before the left brace'{at'pfad....(120' was matched

    damit ich des dann auch mal weis wenn ichs brauch



  • GT schrieb:

    Genial Klasse 👍 geht jetzt danke

    ähm dann noch ne frage das habt ihr aus dem 120 rausgelesen?

    Nein, sondern aus dem

    end of file found before the left brace ... was matched

    Google macht daraus zwar "Dateiende fand, bevor die linke Klammer zusammengebracht wurde", aber mit ein wenig Englischkenne kommt man zu "Dateiende gefunden, bevor ...". 😉

    Und wenn man weiß, dass mit {} Scopes geöffnet und geschlossen werden, wird ein

    "local function definitions are illegal"

    auch klar: Eine fehlende "}" schließt einen scope nicht und der folgende Code wird nicht mehr dem "globalen Scope" sondern einem "lokalen" zugeordnet. Damit wird aus der folgenden Funktiondefinition (also der Körper) illegal, weil er lokal ist:

    int aeussereFkt(); // globale Funktionsdeklaration (erlaubt)
    
    int aeussereFkt() { // globale Funktionsdefinition (erlaubt)
    
       int innerFkt(); // lokale Funktionsdeklaration (erlaubt)
       int innerFkt() { // lokale Funktionsdefinition (VERBOTEN !!!!)
    
          return 0;
       }
    
       return 0;
    }
    

    Aber letztlich habe ich diese Fehlermeldung einfach schon so oft gesehen (und die ersten 20 mal, ohne sie zu verstehen), dass wir uns inzwischen beim Vornamen nennen. 😉

    Gruß,

    Simon2.



  • ahso ok danke



  • GT schrieb:

    Genial Klasse 👍 geht jetzt danke
    ähm dann noch ne frage das habt ihr aus dem 120 rausgelesen?

    In Zeile 120 war die öffnende Klammer, die du vergessen hast zu schkießen 😉


Anmelden zum Antworten