<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[scanner funtzt nicht]]></title><description><![CDATA[<p>ich will einen scanner schreiben der ein file einliest und die Daten in einem vector von objekten speichert. aber es treten lauter komische fehlermeldungen auf die kein c++ noob interpretieren kann:</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;cstdlib&gt;
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;vector&gt;

#ifndef Personen_h
#include &quot;Personen.h&quot;
#define Personen_h 
#endif
#ifndef Scanner_h
#define Scanner_h
#include &quot;Scanner.h&quot;
#endif

using namespace std;

void Scanner::scanfile(char* fname, std::vector &lt;Personen&gt; PersonenVect){       

fstream F (fname, ios::in | ios::out);
char c;
string element;
printf (&quot;file %s\n&quot;, fname);

  if (F.fail()) { 
               // perror (&quot;file:&quot; fname &quot; konnte nicht geoeffnet werden, argumente vergessen?&quot;);
                 exit (1); }
Personen p =new Personen(); 
 F.get(c);

          int datatype=0;
         int year=0;
         int base=1000;
         int pos=0;
         int x=0;
   while (!F.fail())
   {

               while ( (c &gt;= 'a' &amp;&amp; c &lt;= 'z') || (c &gt;= 'A' &amp;&amp; c &lt;= 'Z') || c=='ö' || c=='ä' || c=='ü' || c=='-'){
                     if (datatype==0)datatype=1; //string
                     if (datatype==2) exit(1); //zahl darf im namen nicht vorkommen                   
                       element+=c;
                        F.get(c);                  
               }

               if (c==' ' || c=='\t' || c=='\n'){

                       if (datatype==1){
                           //element+='\0';
                             p.storeStr(pos,element); 
                             pos++;
                             element='\0';
                              datatype=0;}
                           }
                       else if (datatype==2){
                       storeInt(pos,year);
                            year=0;
                             base=1000;
                             pos++;
                              datatype=0;
                            }
                      if (c=='\n'){   
                        pos=0;
                        x++;
                        PersonenVect.push_back(p);
                        p= new Personen();
                         }
                       datatype=0;
                      F.get(c);                        
               }

                 while ( (c &gt;= '0' &amp;&amp; c &lt;= '9') &amp;&amp; base !=0){
                       if (datatype==0)datatype=2; //zahl
                     if  (datatype==1) exit(1); // buchstabe darf in zahl nicht vorkommen 
                       year += (c-'0')*base; 
                       base=base/10;
                       F.get(c); 
               }       
   }
F.close();
//return 0;
}
}
</code></pre>
<blockquote>
<p>Scanner.cpp In member function <code>void Scanner::scanfile(char*, std::vector&lt;Personen, std::allocator&lt;Personen&gt; &gt;)': 28 Scanner.cpp conversion from \</code>Personen*' to non-scalar type `Personen' requested<br />
66 Scanner.cpp no match for 'operator=' in 'p = (((Personen*)operator new(56u)), (&lt;anonymous&gt;-&gt;Personen::Personen(), &lt;anonymous&gt;))'<br />
note Personen.h:4 candidates are: Personen&amp; Personen::operator=(const Personen&amp;)<br />
80 Scanner.cpp expected constructor, destructor, or type conversion before '.' token<br />
80 Scanner.cpp expected <code>,' or</code>;' before '.' token<br />
82 Scanner.cpp expected declaration before '}' token</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/topic/169069/scanner-funtzt-nicht</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 19:45:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/169069.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 01 Jan 2007 15:33:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to scanner funtzt nicht on Mon, 01 Jan 2007 15:33:42 GMT]]></title><description><![CDATA[<p>ich will einen scanner schreiben der ein file einliest und die Daten in einem vector von objekten speichert. aber es treten lauter komische fehlermeldungen auf die kein c++ noob interpretieren kann:</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;cstdlib&gt;
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;vector&gt;

#ifndef Personen_h
#include &quot;Personen.h&quot;
#define Personen_h 
#endif
#ifndef Scanner_h
#define Scanner_h
#include &quot;Scanner.h&quot;
#endif

using namespace std;

void Scanner::scanfile(char* fname, std::vector &lt;Personen&gt; PersonenVect){       

fstream F (fname, ios::in | ios::out);
char c;
string element;
printf (&quot;file %s\n&quot;, fname);

  if (F.fail()) { 
               // perror (&quot;file:&quot; fname &quot; konnte nicht geoeffnet werden, argumente vergessen?&quot;);
                 exit (1); }
Personen p =new Personen(); 
 F.get(c);

          int datatype=0;
         int year=0;
         int base=1000;
         int pos=0;
         int x=0;
   while (!F.fail())
   {

               while ( (c &gt;= 'a' &amp;&amp; c &lt;= 'z') || (c &gt;= 'A' &amp;&amp; c &lt;= 'Z') || c=='ö' || c=='ä' || c=='ü' || c=='-'){
                     if (datatype==0)datatype=1; //string
                     if (datatype==2) exit(1); //zahl darf im namen nicht vorkommen                   
                       element+=c;
                        F.get(c);                  
               }

               if (c==' ' || c=='\t' || c=='\n'){

                       if (datatype==1){
                           //element+='\0';
                             p.storeStr(pos,element); 
                             pos++;
                             element='\0';
                              datatype=0;}
                           }
                       else if (datatype==2){
                       storeInt(pos,year);
                            year=0;
                             base=1000;
                             pos++;
                              datatype=0;
                            }
                      if (c=='\n'){   
                        pos=0;
                        x++;
                        PersonenVect.push_back(p);
                        p= new Personen();
                         }
                       datatype=0;
                      F.get(c);                        
               }

                 while ( (c &gt;= '0' &amp;&amp; c &lt;= '9') &amp;&amp; base !=0){
                       if (datatype==0)datatype=2; //zahl
                     if  (datatype==1) exit(1); // buchstabe darf in zahl nicht vorkommen 
                       year += (c-'0')*base; 
                       base=base/10;
                       F.get(c); 
               }       
   }
F.close();
//return 0;
}
}
</code></pre>
<blockquote>
<p>Scanner.cpp In member function <code>void Scanner::scanfile(char*, std::vector&lt;Personen, std::allocator&lt;Personen&gt; &gt;)': 28 Scanner.cpp conversion from \</code>Personen*' to non-scalar type `Personen' requested<br />
66 Scanner.cpp no match for 'operator=' in 'p = (((Personen*)operator new(56u)), (&lt;anonymous&gt;-&gt;Personen::Personen(), &lt;anonymous&gt;))'<br />
note Personen.h:4 candidates are: Personen&amp; Personen::operator=(const Personen&amp;)<br />
80 Scanner.cpp expected constructor, destructor, or type conversion before '.' token<br />
80 Scanner.cpp expected <code>,' or</code>;' before '.' token<br />
82 Scanner.cpp expected declaration before '}' token</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1200648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1200648</guid><dc:creator><![CDATA[meth]]></dc:creator><pubDate>Mon, 01 Jan 2007 15:33:42 GMT</pubDate></item><item><title><![CDATA[Reply to scanner funtzt nicht on Mon, 01 Jan 2007 15:45:16 GMT]]></title><description><![CDATA[<p>öhm die variable p von type Person muss ein zeiger sein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1200652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1200652</guid><dc:creator><![CDATA[firefly]]></dc:creator><pubDate>Mon, 01 Jan 2007 15:45:16 GMT</pubDate></item><item><title><![CDATA[Reply to scanner funtzt nicht on Mon, 01 Jan 2007 17:35:27 GMT]]></title><description><![CDATA[<p>danke, jetzt funtzen aber wieder einige sachen nicht:</p>
<pre><code class="language-cpp">Personen::p.storeStr(pos,element); //50
 // p.storeStr(pos,element);  geht auch nicht 
PersonenVect.push_back(p); //65
</code></pre>
<blockquote>
<p>50 Scanner.cpp `p' is not a member of `Personen'<br />
65 Scanner.cpp no matching function for call to `std::vector&lt;Personen, std::allocator&lt;Personen&gt; &gt;::push_back(Personen*&amp;)'</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1200698</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1200698</guid><dc:creator><![CDATA[meth]]></dc:creator><pubDate>Mon, 01 Jan 2007 17:35:27 GMT</pubDate></item><item><title><![CDATA[Reply to scanner funtzt nicht on Mon, 01 Jan 2007 17:51:22 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Personen p =new Personen();
</code></pre>
<p>ersetzen durch</p>
<pre><code class="language-cpp">Personen p;
</code></pre>
<p>Wie Du jetzt auf Person::p kommst weiß ich nicht.</p>
<p>Schau Dir das Thema Zeiger noch mal an, im geposteten Source hast Du leaks, müsstest bei push_back den Zeiger dereferenzieren (geht einfacher durch Personen p, kein Zeiger, keine Leaks).</p>
<p>Includeguards gehören in den eigentlichen Header, nicht an die Stelle in der die Datei includiert wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1200706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1200706</guid><dc:creator><![CDATA[Knuddlbaer]]></dc:creator><pubDate>Mon, 01 Jan 2007 17:51:22 GMT</pubDate></item><item><title><![CDATA[Reply to scanner funtzt nicht on Tue, 02 Jan 2007 13:12:01 GMT]]></title><description><![CDATA[<p>wird durch Personen p überhaupt ein neues Objekt erzeugt? dazu brauch man doch das new oder? also nur Peronen p fällt aus weil ich bei zeile 66 immer eine neue person erzeuge, und was ich jetzt nicht verstehe ist folgendes:</p>
<pre><code class="language-cpp">Personen *p= new Personen();
//...
  p= new Personen(); //funzt
// *p= new Personen(); funzt nicht
</code></pre>
<p>p ist doch ein zeiger warum beim zuweisen eines neuen Objekts kein * ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1201104</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1201104</guid><dc:creator><![CDATA[meth]]></dc:creator><pubDate>Tue, 02 Jan 2007 13:12:01 GMT</pubDate></item><item><title><![CDATA[Reply to scanner funtzt nicht on Tue, 02 Jan 2007 13:22:47 GMT]]></title><description><![CDATA[<p>Also durch Personen P; wird sehr wohl ein neues Objekt erzeugt. Nur halt auf dem Stack und nicht auf dem Heap.</p>
<p>Viele Tutorials und Bücher hämmern einem leider immer zuerst und ausführlich das new ein. In 99% der Fällt kommt man ohne new aus. Frage: wie erzeugst du ein neues int?</p>
<p>So:</p>
<pre><code class="language-cpp">int i;
</code></pre>
<p>oder so:</p>
<pre><code class="language-cpp">int *i = new int;
</code></pre>
<p>In 99% der Fälle doch eher wie im ersten Fall, oder? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> Personen und jede andere Klasse, ist in C++ ein <strong>Typ</strong>. Genauso wie int, char usw. auch Typen sind.<br />
Jetzt vergleich mal die erste Variante mit der:</p>
<pre><code class="language-cpp">Personen i;
</code></pre>
<p>Hem... sieht gleich aus. Nur ein anderer Typ. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1201113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1201113</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Tue, 02 Jan 2007 13:22:47 GMT</pubDate></item><item><title><![CDATA[Reply to scanner funtzt nicht on Tue, 02 Jan 2007 13:21:26 GMT]]></title><description><![CDATA[<p>Neue Elemente in den Vector packen - ohne new</p>
<pre><code class="language-cpp">std::vector&lt;T&gt; vec;

for(int i = 0;i &lt; 10;++i)
{
    T t;  *1
    t.member1 = 12;
    t.memfunc(iregndwas);

    vec.push_back(t); *2
}
</code></pre>
<p>*1<br />
Durch die { } wird t am Ende eines durchlaufes der Schleife stehts zerstört, Du legst also immer ein neues Objekt an.<br />
*2 Von diesem Objekt wird eine Kopie erzeugt.</p>
<p>Nur 1 Objekt anlegen und immer wieder verwenden *1</p>
<pre><code class="language-cpp">std::vector&lt;T&gt; vec;

T t;  *2
for(int i = 0;i &lt; 10;++i)
{
    t.member1 = 12;
    t.memfunc(iregndwas);

    vec.push_back(t); *3
}
</code></pre>
<p>*1 Das Objekt wird nur einmal angelegt und behält immer die letzen Werte.<br />
So kann man z.B., wenn man nur 2 von 8 Werten ändern muss, vorbelegen<br />
*2 Alle oder die nur gewünschten Werte ändern<br />
*3 push_back erzeugt eine Kopie des Objektes, somit kann man das alte Objekt<br />
wieder modifizieren.</p>
<p>Zeiger:</p>
<pre><code class="language-cpp">T * t;  &lt;&lt; // Das * sagt, das wir nun einen Zeiger auf den Typ t haben.

t = new T; // t wurde weiter oben als T * (also Zeiger auf t) deklariert. 
           // t ist ein Zeiger und wird auch immer ein Zeiger sein

*t = &lt;...&gt; // Der * vor einem Zeiger dereferenziert. Man kommt also an
           // den &quot;inhalt&quot; des Zeigers herann.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1201115</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1201115</guid><dc:creator><![CDATA[Knuddlbaer]]></dc:creator><pubDate>Tue, 02 Jan 2007 13:21:26 GMT</pubDate></item><item><title><![CDATA[Reply to scanner funtzt nicht on Tue, 02 Jan 2007 13:22:52 GMT]]></title><description><![CDATA[<p>Mit &quot;p=...&quot; änderst du das Ziel, auf das der Zeiger verweist (könnte ein Speicherleck geben, wenn niemand anderes auf das alte Ziel zeigt), mit &quot;*p=...&quot; änderst du den Inhalt der Variable, auf die du zeigst.</p>
<p>Und &quot;Personen p;&quot; legt ein neues Objekt an, das von späteren Methodenaufrufen immer wieder aktualisiert wird. (push_back() speichert eine Kopie davon, so daß du es danach neu verwenden kannst)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1201118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1201118</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 02 Jan 2007 13:22:52 GMT</pubDate></item><item><title><![CDATA[Reply to scanner funtzt nicht on Thu, 04 Jan 2007 18:34:47 GMT]]></title><description><![CDATA[<p>jetzt tauchen nur noch die fehlermeldungen bei zeile 80 und 82 auf.<br />
einen destruktor hab ich definiert, aber was will der kompiler da innerhalb der methode nachdem Personen p; eh auf dem stak liegt müsste es doch passen oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1202966</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1202966</guid><dc:creator><![CDATA[meth]]></dc:creator><pubDate>Thu, 04 Jan 2007 18:34:47 GMT</pubDate></item><item><title><![CDATA[Reply to scanner funtzt nicht on Fri, 05 Jan 2007 07:31:21 GMT]]></title><description><![CDATA[<p>meth schrieb:</p>
<blockquote>
<p>jetzt tauchen nur noch die fehlermeldungen bei zeile 80 und 82 auf.</p>
</blockquote>
<p>Was für Fehler?</p>
<blockquote>
<p>einen destruktor hab ich definiert, aber was will der kompiler da innerhalb der methode nachdem Personen p; eh auf dem stak liegt müsste es doch passen oder?</p>
</blockquote>
<p>Wo (in welchem Bereich der Klassendefinition) und wie hast du den Dtor angelegt?</p>
<p>PS: Auch Stack-Variablen müssen sauber gelöscht werden, benötigen also Zugriff auf ihren Dtor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1203267</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1203267</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 05 Jan 2007 07:31:21 GMT</pubDate></item><item><title><![CDATA[Reply to scanner funtzt nicht on Fri, 05 Jan 2007 22:10:00 GMT]]></title><description><![CDATA[<p>ich hab oben nach using namespace std den destruktor:</p>
<pre><code class="language-cpp">Scanner::~Scanner(){
}
</code></pre>
<p>delete p funtz nicht weil p ja keine klassenvariable ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1204022</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1204022</guid><dc:creator><![CDATA[meth]]></dc:creator><pubDate>Fri, 05 Jan 2007 22:10:00 GMT</pubDate></item><item><title><![CDATA[Reply to scanner funtzt nicht on Sat, 06 Jan 2007 13:24:43 GMT]]></title><description><![CDATA[<p>was simmt bei der anweisung nicht? gibts irgendwo ein anständiges destuktortutorial was mehr als nur</p>
<pre><code class="language-cpp">~bla(){}
</code></pre>
<p>zu bieten hat?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1204256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1204256</guid><dc:creator><![CDATA[meth]]></dc:creator><pubDate>Sat, 06 Jan 2007 13:24:43 GMT</pubDate></item><item><title><![CDATA[Reply to scanner funtzt nicht on Mon, 08 Jan 2007 15:00:27 GMT]]></title><description><![CDATA[<p>mit dem destruktor war alles in ordnung eine } zuviel in der methode war schuld.<br />
jetzt läuft das programm liefert abew einen leeren vector zurück warum <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1205720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1205720</guid><dc:creator><![CDATA[meth]]></dc:creator><pubDate>Mon, 08 Jan 2007 15:00:27 GMT</pubDate></item></channel></rss>