<?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[Objekte nicht funktionsübergreifend verwendbar?]]></title><description><![CDATA[<p>Hallo alle mal. Ich bin relativ neu beim progr. dabei und versuche gerade mein erstes &quot;größeres&quot; Projekt zustande zu bringen. Jetzt habe ich allerdings ein problem<br />
ich habe eine funktion in einer klasse, die mir eine reihe von anderen objekten definiert. wenn ich nun aber eine zweite funktion der klasse aufrufe, sind die alten objekte nicht mehr deklariert.<br />
warum nicht?<br />
das ganze sieht in etwa so aus:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include &quot;kontrolle.h&quot;
#include &quot;admin.h&quot;

using namespace std;
void first_first(void)
{
     Admin n_sys, n_tre, n_pro;             //hier werden die Objekte erzeugt
     n_sys.standard(&quot;Ort&quot;,&quot;Name1&quot;,0);       //hier werden ihnen von einer
     n_tre.standard(&quot;Ort&quot;,&quot;Name2&quot;,0);       //anderen Klasse nacheinander
     n_pro.standard(&quot;Ort&quot;,&quot;Name3&quot;,0);       //Werte zugewiesen
}

void first_main(string name, string pw)
{
     n_system.output();                     //Aber hier existieren die Objekte
     n_treibe.output();                     //Angeblich nicht mehr.....
     n_progra.output();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/211695/objekte-nicht-funktionsübergreifend-verwendbar</link><generator>RSS for Node</generator><lastBuildDate>Wed, 14 Oct 2026 08:15:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/211695.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 26 Apr 2008 10:50:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Objekte nicht funktionsübergreifend verwendbar? on Sat, 26 Apr 2008 10:50:25 GMT]]></title><description><![CDATA[<p>Hallo alle mal. Ich bin relativ neu beim progr. dabei und versuche gerade mein erstes &quot;größeres&quot; Projekt zustande zu bringen. Jetzt habe ich allerdings ein problem<br />
ich habe eine funktion in einer klasse, die mir eine reihe von anderen objekten definiert. wenn ich nun aber eine zweite funktion der klasse aufrufe, sind die alten objekte nicht mehr deklariert.<br />
warum nicht?<br />
das ganze sieht in etwa so aus:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include &quot;kontrolle.h&quot;
#include &quot;admin.h&quot;

using namespace std;
void first_first(void)
{
     Admin n_sys, n_tre, n_pro;             //hier werden die Objekte erzeugt
     n_sys.standard(&quot;Ort&quot;,&quot;Name1&quot;,0);       //hier werden ihnen von einer
     n_tre.standard(&quot;Ort&quot;,&quot;Name2&quot;,0);       //anderen Klasse nacheinander
     n_pro.standard(&quot;Ort&quot;,&quot;Name3&quot;,0);       //Werte zugewiesen
}

void first_main(string name, string pw)
{
     n_system.output();                     //Aber hier existieren die Objekte
     n_treibe.output();                     //Angeblich nicht mehr.....
     n_progra.output();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1498430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1498430</guid><dc:creator><![CDATA[majt]]></dc:creator><pubDate>Sat, 26 Apr 2008 10:50:25 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte nicht funktionsübergreifend verwendbar? on Sat, 26 Apr 2008 11:06:00 GMT]]></title><description><![CDATA[<p>2 Gründe fallen spontan auf.</p>
<ol>
<li>Du erzeugst:</li>
</ol>
<pre><code class="language-cpp">Admin n_sys, n_tre, n_pro;
</code></pre>
<p>beutzt aber</p>
<pre><code class="language-cpp">n_system.output();                     //Aber hier existieren die Objekte
     n_treibe.output();                     //Angeblich nicht mehr.....
     n_progra.output();
</code></pre>
<p>Das sind völlig verschiedene Variablen. Dies kann also so nicht gehen.</p>
<p>Aber:</p>
<ol start="2">
<li>Du hast eh eine &quot;Skope-Problem&quot;.<br />
Selbst wenn du die gleich nennen würdest, würde es nicht gehen.<br />
Denn die 3 Admin Objekte die du in der ersten Funktion erzeugst, gibt es auch<br />
nur dort.<br />
Wenn du die 2te Funktion von dort aufrufst, wo die Objekte existieren ( also bei dir in der ersten Funktion ) und ensprechend die Objecte übergibst, kann es gehen.<br />
Oder du rufst output einfach sofort auf.<br />
So oder so,wäre es gut zu wissen, was du vor hast, bevor man vermutet,<br />
wie man dein Konstrukt anpassen könnte.<br />
Auf jeden Fall sind deine 3 Objekte im localen Scope ( der ersten Funktion ) und existieren nicht mehr<br />
sobald du ihn ( also die Funktion ) verlässt</li>
</ol>
]]></description><link>https://www.c-plusplus.net/forum/post/1498437</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1498437</guid><dc:creator><![CDATA[shapeless]]></dc:creator><pubDate>Sat, 26 Apr 2008 11:06:00 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte nicht funktionsübergreifend verwendbar? on Sat, 26 Apr 2008 11:18:28 GMT]]></title><description><![CDATA[<p>shapeless schrieb:</p>
<blockquote>
<p>2 Gründe fallen spontan auf.</p>
<ol>
<li>Du erzeugst:</li>
</ol>
<pre><code class="language-cpp">Admin n_sys, n_tre, n_pro;
</code></pre>
<p>beutzt aber</p>
<pre><code class="language-cpp">n_system.output();                     //Aber hier existieren die Objekte
     n_treibe.output();                     //Angeblich nicht mehr.....
     n_progra.output();
</code></pre>
<p>Das sind völlig verschiedene Variablen. Dies kann also so nicht gehen.</p>
</blockquote>
<p>Ok stimmt. das war allerdings nur nen fehler den ich hier gemacht hab, weil ich den ganzen code nen bissel gekürzt hab, damits besser lesbar ist.</p>
<blockquote>
<p>Aber:</p>
<ol start="2">
<li>Du hast eh eine &quot;Skope-Problem&quot;.<br />
Selbst wenn du die gleich nennen würdest, würde es nicht gehen.<br />
Denn die 3 Admin Objekte die du in der ersten Funktion erzeugst, gibt es auch<br />
nur dort.<br />
[...]</li>
</ol>
</blockquote>
<p>ok verstehe. ich bin mir da nicht sicher, wie lautet die genaue syntax um objekte zu übergeben? eigentlich muss ich der funktion ja vorher sagen was alles übergeben wird, aber das kann ich nicht machen, wenn ich später noch mehr objekte kreieren will und nich weiß wie viele es sein werden.....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1498440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1498440</guid><dc:creator><![CDATA[majt]]></dc:creator><pubDate>Sat, 26 Apr 2008 11:18:28 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte nicht funktionsübergreifend verwendbar? on Sat, 26 Apr 2008 11:57:58 GMT]]></title><description><![CDATA[<p>Ja, da hast du recht, dies musst du der Funktion übergeben.</p>
<p>Dies wäre ein kleines Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class Admin{
public:
  Admin(int val): val_(val){}
  void output()const{std::cout&lt;&lt;val_&lt;&lt;&quot;\n&quot;;}
private:
  int val_;
};

void print(const Admin &amp; adm){
  adm.output();
}

void create_and_output(){
  Admin foo(1),bar(2),baz(3);
  print(foo);
  print(bar);
  print(baz);
}

int main(){
  create_and_output();
  return 0;
}
</code></pre>
<p>Naja, letzendlich musst du ( ohne templates oÄ zu nutzen ) schon wissen,<br />
was du übergeben willst.<br />
Du brauchst aber ggf die 2te Funktion garnicht.<br />
Wie man in meinem Beispiel sehen kann, macht Sie ja nichts, als eine Member<br />
funktion einer Klasse aufzurufen. Dies kannst du natürlich auch einfach<br />
direkt in der ersten tun.<br />
Wenn du aber elegant mehrere ( ungewiss wieviele Objekte ) verwalten möchtest,<br />
bietet es sich natürlich an einen Container zu nutzen.<br />
Dann kannst du beliebig viele Objkte eines Types dort verstauen und über eine<br />
einfache Iteration alle ( in einer helfer funktion der du den Container übergibst ) alle ausgeben.</p>
<p>Dann brächstest du aber für jeden Typen ( falls du noch andere Klassen hast )<br />
einen eigenen Container.<br />
Ausser du nutzt einen Container mit Poinern ( zb pointer-vektor ), dann kannst<br />
du auch einen für alles nehmen und dir Polimorphismus zu nutzen machen.<br />
Ich weiss aber nicht, ob du dies kennst oder willst.</p>
<p>So oder so denke ich mit Containern ( zB vector ) kannst du ne menge gewinnen.</p>
<p>//edit1</p>
<p>Mit containern würde es dann so ungefähr aussehen können:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;iterator&gt;
class Admin{
public:
  Admin(int val): val_(val){}
  void output()const{std::cout&lt;&lt;val_&lt;&lt;&quot;\n&quot;;}
private:
  int val_;
};

typedef std::vector&lt;Admin&gt; admin_container_t;

void print(const admin_container_t &amp; container){
  for(admin_container_t::const_iterator it=container.begin();it!=container.end();++it)
    it-&gt;output();
  return;
}

void create_and_output(){
  admin_container_t admin_container;
  admin_container.push_back(Admin(1));
  admin_container.push_back(Admin(2));
  admin_container.push_back(Admin(3));
  print(admin_container);
}

int main(){
  create_and_output();
  return 0;
}
</code></pre>
<p>Bevor ich aber weiter mache, würde ich gern darauf hinweisen, dass<br />
es ggf keinen Sinn macht Objekte Lokal zu erzeugen, dann von dort aus<br />
diverse andere Sachen zu starten, da deine Funktion sonst zuviel verschiedene<br />
Logik enhtält.<br />
Insgesamt sehe ich nicht den Vorteil, den deine erste Funktion hat bzw Ihren Sinn.<br />
Dies kann aber daran liegen, dass du ja nur ein Fragment gezeigt hast.<br />
Wie dem auch sei. Die Objekte nicht lokal anzulegen ist denke ich sinnvoll,<br />
sobald man diese wiederverwenden möchte.<br />
Aber wie gesagt ohne den echten Inhalt des Programmes zu kennen, kann dazu<br />
natürlich nicht viel sagen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1498459</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1498459</guid><dc:creator><![CDATA[shapeless]]></dc:creator><pubDate>Sat, 26 Apr 2008 11:57:58 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte nicht funktionsübergreifend verwendbar? on Sat, 26 Apr 2008 12:21:28 GMT]]></title><description><![CDATA[<p>danke erstmal soweit für die ganze hilfe.<br />
also der sinn des programms ist folgender:<br />
ich habe eine datei, die die gesamten funktionen &quot;kontrolliert&quot;<br />
ich hab sie kontrolle.h bzw. kontrolle.cpp genannt</p>
<pre><code class="language-cpp">//Kontrolle.h
#ifndef _KONTROLLE_
#define _KONTROLLE_

class Kontrolle
{
      bool start_einstellungen;
      std::string name, pw;
      int was_ich_will;

      public:
             void first_first(std::string name, std::string passwort);
};

#endif
</code></pre>
<p>+ Kontrolle.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &quot;kontrolle.h&quot;
#include &quot;ordneradmin.h&quot;

using namespace std;
void Kontrolle::first_first(string name, string pw)
{
     Kontrolle kontrolle;
     Ordneradmin n_system, n_treibe, n_progra;
     n_system.standard(&quot;C:&quot;,&quot;System&quot;,0);
     n_treibe.standard(&quot;Programme&quot;,&quot;Treiber&quot;,0);
     n_progra.standard(&quot;C:&quot;,&quot;Programme&quot;,0);
     int was_ich_will;
     for (;;)
     {
     cout &lt;&lt; &quot;Welchen Ordner wollen sie angezeigt bekommen?&quot; &lt;&lt; endl;
     cin &gt;&gt; was_ich_will;
     if (was_ich_will == 1)
                      n_system.output();
     if (was_ich_will == 2)
                      n_treibe.output();
     if (was_ich_will == 3)
                      n_progra.output();
     if (was_ich_will == 0 || was_ich_will &gt; 3)
                      break;
     }
}
</code></pre>
<p>Dann gibt es noch eine Datei, die hier die ganze Zeit aufgerufen wird:<br />
ordneradmin.h</p>
<pre><code class="language-cpp">#ifndef _ORDNERADMIN_
#define _ORDNERADMIN_
#include &lt;string&gt;

using namespace std;
class Ordneradmin
{
      string pname, port;
      int pid;      

      public:
             bool standard(const string&amp;, const string&amp;, int);
             void output(void);
             std::string name, ort;
             int id;

};
#endif
</code></pre>
<p>und dazugehörige: ordneradmin.cpp</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iostream&gt;
#include &quot;ordneradmin.h&quot;

bool Ordneradmin::standard(const string&amp; name, const string&amp; ort, int id)
{
     pname = name;
     port = ort;
     pid = id;
}

void Ordneradmin::output(void)
{
     cout &lt;&lt; pname &lt;&lt; endl;
     cout &lt;&lt; port &lt;&lt; endl;
     cout &lt;&lt; pid &lt;&lt; endl;
}
</code></pre>
<p>der sinn des programms ist ungefähr folgender:<br />
die kontroll datei wird am anfang aufgerufen und &quot;erstellt&quot; sozusagen 3 virtuelle ordner mit namen, speicherort und id. danach soll sie diese auf befehl einfach nur wieder ausgeben. natürlich will ich damit im endeffekt noch andere sachen machen, aber ich wollte das erstmal soweit hinbekommen... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
natürlich könnte ich auch alles in eine einzige datei machen, aber da das programm ja noch größer wird, hielt ich es für sinnvoll, jetzt schon alles aufzuteilen, damit es alles schön übersichtlich bleibt<br />
der sinn des programms is in etwa, eine festplatte mit dateien, ordnern zu simulieren, die ich dann später natürlich auch umbennen, löschen, etc. möchte. halt wie ein betriebssystem .... findest du meinen ansatz sinnvoll mit dem hintergrundwissen? <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="😃"
    /></p>
<p>Nachtrag: ich habe die ersten beiden funktion in der kontrolle.cpp zusammen in eine gepackt, wie dir sicher aufgefallen ist. (weil du dies ja vorgeschlagen hattest)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1498481</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1498481</guid><dc:creator><![CDATA[majt]]></dc:creator><pubDate>Sat, 26 Apr 2008 12:21:28 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte nicht funktionsübergreifend verwendbar? on Sat, 26 Apr 2008 12:24:23 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
jetzt funktioniert es.<br />
so wie ich es vorhin gepostet habe<br />
aber trotzdem interessiert es mich natürlich ob du es anders gemacht hättest!!!<br />
<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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1498487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1498487</guid><dc:creator><![CDATA[majt]]></dc:creator><pubDate>Sat, 26 Apr 2008 12:24:23 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte nicht funktionsübergreifend verwendbar? on Sat, 26 Apr 2008 13:09:17 GMT]]></title><description><![CDATA[<p>ich denke, ich hätt schon ein wenig anders gemacht, aber sowas ist auch<br />
oft eine Stilfrage.<br />
Wie dem auch sei, eine Kleinigkeit die noch aufgefall ist, ist die Tatsache,<br />
dass dein &quot;int was_ich_will;&quot; einmal in der Klasse Deklariert wird,<br />
aber dann noch einmal in &quot;Kontrolle.cpp&quot; Zeile 14.<br />
Somit überschattet die lokale int variable deine Klassenvarible.<br />
Dies fällt zwar in deinem Fall nicht auf, ist aber meiner Meinung nach<br />
nicht gewollt.<br />
Ich würde eine Variable, die lediglich an einer Stelle eine Eingabe enthält,<br />
auch lokal lassen.<br />
( Sprich die Klassendeklaration entfernen, sofern du sie nicht noch irgendwo anders benutzt. )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1498513</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1498513</guid><dc:creator><![CDATA[shapeless]]></dc:creator><pubDate>Sat, 26 Apr 2008 13:09:17 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte nicht funktionsübergreifend verwendbar? on Sat, 26 Apr 2008 14:57:08 GMT]]></title><description><![CDATA[<p>ja stimmt hatte ich gar nicht gemerkt.<br />
danke für die schnelle antwort</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1498570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1498570</guid><dc:creator><![CDATA[majt]]></dc:creator><pubDate>Sat, 26 Apr 2008 14:57:08 GMT</pubDate></item></channel></rss>