<?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[return struct]]></title><description><![CDATA[<p>Hi, ich würde gerne das hier:</p>
<p>typedef struct {<br />
var x,y,z; // var ist so ähnlich wie int<br />
} VECTOR;</p>
<p>in einer Funktion zurückgeben:</p>
<p>VECTOR ToVec(int R,int G,int <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="B)"
      alt="😎"
    /><br />
{<br />
VECTOR vec = {_VAR(B),_VAR(G),_VAR(R)}; // _VAR konvertiert int in var<br />
return vec;<br />
}</p>
<p>Das funktioniert jedoch nicht so richtig. Wenn ich dass diereckt als Parameter an eine Funktion übergebe, dann sagt der Compiler &quot;cannot convert 'VECTOR' to 'VECTOR*' in argument passing&quot;.</p>
<p>Kann mir jemand sagen wie ich den VECTOR richtig zurückliefern kann.</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/131981/return-struct</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 08:22:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/131981.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 07 Jan 2006 13:22:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to return struct on Sat, 07 Jan 2006 13:22:44 GMT]]></title><description><![CDATA[<p>Hi, ich würde gerne das hier:</p>
<p>typedef struct {<br />
var x,y,z; // var ist so ähnlich wie int<br />
} VECTOR;</p>
<p>in einer Funktion zurückgeben:</p>
<p>VECTOR ToVec(int R,int G,int <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="B)"
      alt="😎"
    /><br />
{<br />
VECTOR vec = {_VAR(B),_VAR(G),_VAR(R)}; // _VAR konvertiert int in var<br />
return vec;<br />
}</p>
<p>Das funktioniert jedoch nicht so richtig. Wenn ich dass diereckt als Parameter an eine Funktion übergebe, dann sagt der Compiler &quot;cannot convert 'VECTOR' to 'VECTOR*' in argument passing&quot;.</p>
<p>Kann mir jemand sagen wie ich den VECTOR richtig zurückliefern kann.</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/959569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/959569</guid><dc:creator><![CDATA[Bernhardt]]></dc:creator><pubDate>Sat, 07 Jan 2006 13:22:44 GMT</pubDate></item><item><title><![CDATA[Reply to return struct on Sat, 07 Jan 2006 13:36:28 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>einfach einen Konstruktor benutzten. Und das typedef brauchst du in C++ auch nicht.</p>
<pre><code class="language-cpp">struct VECTOR{
var x,y,z; // var ist so ähnlich wie int
VECTOR(int R,int G,int B) : x(_VAR(B)), y(_VAR(G)), z(_VAR(R))) {};
};
</code></pre>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/959602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/959602</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Sat, 07 Jan 2006 13:36:28 GMT</pubDate></item><item><title><![CDATA[Reply to return struct on Sat, 07 Jan 2006 14:42:23 GMT]]></title><description><![CDATA[<p>Wie muss ich das denn benutzen (als Parameter in einem Funktionsaufruf)</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/959679</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/959679</guid><dc:creator><![CDATA[Bernhardt]]></dc:creator><pubDate>Sat, 07 Jan 2006 14:42:23 GMT</pubDate></item><item><title><![CDATA[Reply to return struct on Sat, 07 Jan 2006 14:51:06 GMT]]></title><description><![CDATA[<p>meinst du das ?</p>
<pre><code class="language-cpp">void tu_was(VECTOR v ); // prototyp

//aufruf

int r = 1, g = 2, b =3;
tu_was(VECTOR(r,g,b));
</code></pre>
<p>Kurt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/959684</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/959684</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Sat, 07 Jan 2006 14:51:06 GMT</pubDate></item><item><title><![CDATA[Reply to return struct on Sat, 07 Jan 2006 15:05:05 GMT]]></title><description><![CDATA[<p>Nein das, funktioniert bei mir leider nicht. ich bräuchte schon eine Funktione die VECTOR zurückliefern kann.</p>
<p>Ich hab es so probiert und das geht auch (mehr oder weniger)</p>
<pre><code>VECTOR *ToVec(int R,int G,int B)
{
VECTOR vec = {_VAR(B),_VAR(G),_VAR(R)}; // _VAR konvertiert int in var
return &amp;vec;
}
</code></pre>
<p>Jedoch kann ich diese Funktion nur ein mal Aufrufen, da sie danach immer das selbe zurückliefert (das Ergebniss vom ersten Aufruf)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/959695</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/959695</guid><dc:creator><![CDATA[Bernhardt]]></dc:creator><pubDate>Sat, 07 Jan 2006 15:05:05 GMT</pubDate></item><item><title><![CDATA[Reply to return struct on Sat, 07 Jan 2006 15:08:39 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>du brachst keine weitere Funktion drumherum</p>
<pre><code class="language-cpp">VECTOR test = VECTOR(1,2,3);
</code></pre>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/959702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/959702</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Sat, 07 Jan 2006 15:08:39 GMT</pubDate></item><item><title><![CDATA[Reply to return struct on Sat, 07 Jan 2006 15:15:20 GMT]]></title><description><![CDATA[<p>Ich habe den Veracht hier hat sich jemand im Forum vertan und will eigentlich C programmieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/959714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/959714</guid><dc:creator><![CDATA[Helium]]></dc:creator><pubDate>Sat, 07 Jan 2006 15:15:20 GMT</pubDate></item><item><title><![CDATA[Reply to return struct on Sat, 07 Jan 2006 15:21:15 GMT]]></title><description><![CDATA[<p>So geht's auch nicht. Wenn ToVec() beendet ist ist der zurückgegebene VECTOR * ungültig.<br />
könntest es so machen</p>
<pre><code class="language-cpp">VECTOR *ToVec(int R,int G,int B)
{
    return new VECTOR(R,G,B);
}
</code></pre>
<p>Frage mich nur wozu du eine Konvertierungs funktion brauchst wenn du einen constructor hast.<br />
warum nicht einfach</p>
<pre><code class="language-cpp">VECTOR * pv = new VECTOR( R,G,B);
   ....
   delete pv;
</code></pre>
<p>Kurt<br />
EDIT: Heute bin ich wirklich langsam. 10min zu spät</p>
]]></description><link>https://www.c-plusplus.net/forum/post/959717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/959717</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Sat, 07 Jan 2006 15:21:15 GMT</pubDate></item><item><title><![CDATA[Reply to return struct on Sat, 07 Jan 2006 15:23:49 GMT]]></title><description><![CDATA[<p>VECTOR test = ToVec(10,10,10);<br />
funktioniert, aber die Funktion die ich aufrufen möchte muss ich mit z.B.<br />
testfunktion(&amp;test);<br />
aufrufen. Warum funzt dann<br />
testfunktion(&amp;ToVec(10,10,10));<br />
nicht, wenn ich die Funktion so schreibe:</p>
<p>VECTOR ToVec(int R,int G,int B){<br />
VECTOR vec = {_VAR(B),_VAR(G),_VAR(R)};<br />
return vec;<br />
}</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/959723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/959723</guid><dc:creator><![CDATA[Bernhardt]]></dc:creator><pubDate>Sat, 07 Jan 2006 15:23:49 GMT</pubDate></item><item><title><![CDATA[Reply to return struct on Sat, 07 Jan 2006 15:31:02 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>weil du die Speicheradresse auf eine lokale Variable (die die in der Funktion ToVec zurückgegeben wird) außerhalb der Lebenszeit dieser verwenden willst. Und damit erzeugst du undefiniertes Verhalten.<br />
Wenn du wirklich auf deine (mit Konstruktor unnötige) ToVec-Funktion bestehst, must du mit Pointern wie von ZuK beschrieben arbeitet. Darfst dann aber nicht vergessen, dann selber den mit new reservierten Speicher nach der Benutzung der Instanz wieder freizugeben.</p>
<p>Edit : Bitte benutzt Code-Tags, um in deinem Posts hier im Forum deinen Quellcode zu formatieren. Zu finden beim Post-Schreiben gleich unter den Smilis.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/959729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/959729</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Sat, 07 Jan 2006 15:31:02 GMT</pubDate></item><item><title><![CDATA[Reply to return struct on Sat, 07 Jan 2006 15:35:06 GMT]]></title><description><![CDATA[<p>Danke jetzt funktionierts. Ich hab das ganze erst vollkommen falsch verstanden, aber jetzt ist mir alles klar.<br />
PS: Wie kann ich den Speicher wieder freigeben?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/959733</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/959733</guid><dc:creator><![CDATA[Bernhardt]]></dc:creator><pubDate>Sat, 07 Jan 2006 15:35:06 GMT</pubDate></item><item><title><![CDATA[Reply to return struct on Sat, 07 Jan 2006 15:39:43 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>mit delete. Bitte schau dir mal die Grundlagen in einem Tutorial an, zum Beispiel <a href="http://tutorial.schornboeck.net/inhalt.htm" rel="nofollow">hier</a>.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/959737</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/959737</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Sat, 07 Jan 2006 15:39:43 GMT</pubDate></item><item><title><![CDATA[Reply to return struct on Sat, 07 Jan 2006 16:13:35 GMT]]></title><description><![CDATA[<p>Ok, jetzt weiß ich wie ich den Speicher wieder freigeben kann, jedoch ist mir nicht ganz klar, wann ich das machen soll. Ich habe jetzt das hier:</p>
<pre><code>VECTOR ToVec(int R, int G, int B)
{
    R = (int)((float)R * CompRV(R));
    G = (int)((float)G * CompGV(G));
    B = (int)((float)B * CompBV(B));
    return new VECTOR(_VAR(B),_VAR(G),_VAR(R));
}
</code></pre>
<pre><code>void Linie(int x1, int y1, int x2, int y2)
{
    draw_line(_VAR(x1),_VAR(y1),_VAR(x2),_VAR(y2),ToVec(255,128,0));
}
</code></pre>
<p>Wann bzw. wo soll ich denn nun delete aufrufen, und was genau soll ich wieder freigeben, ich hab ja hier keine Variable die ich wie z.b. hier einfach so freigeben kann.</p>
<pre><code>int* i=new int;
int j=7;
i=&amp;j;
delete i;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/959787</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/959787</guid><dc:creator><![CDATA[Bernhardt]]></dc:creator><pubDate>Sat, 07 Jan 2006 16:13:35 GMT</pubDate></item><item><title><![CDATA[Reply to return struct on Sat, 07 Jan 2006 16:23:17 GMT]]></title><description><![CDATA[<p>Bernhardt schrieb:</p>
<blockquote>
<p>Wann bzw. wo soll ich denn nun delete aufrufen</p>
</blockquote>
<p>delete rufst du für den Zeiger auf, der den Return-Wert von ToVec() speichert. Wann? Dann wenn du den dynamisch erstellten Vektor nicht mehr brauchst.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">int* create(int x) 
{ 
    return new int(x); 
}

...

int main()
{
     int* value = create(9);

     // arbeite mit value... Zeiger darf nicht &quot;umgebogen&quot; werden!

     delete value; // Speicher, der in create() alloziert wurde, wieder freigeben.
}
</code></pre>
<p>Gruß Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/959794</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/959794</guid><dc:creator><![CDATA[Caipi]]></dc:creator><pubDate>Sat, 07 Jan 2006 16:23:17 GMT</pubDate></item><item><title><![CDATA[Reply to return struct on Sat, 07 Jan 2006 16:22:54 GMT]]></title><description><![CDATA[<p>Ok, danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/959796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/959796</guid><dc:creator><![CDATA[Bernhardt]]></dc:creator><pubDate>Sat, 07 Jan 2006 16:22:54 GMT</pubDate></item><item><title><![CDATA[Reply to return struct on Sat, 07 Jan 2006 16:31:46 GMT]]></title><description><![CDATA[<p>Rein interessehalber, was kann passieren wenn man den mit <strong>new</strong> reservierten Speicherbereich nicht wieder freigibt?<br />
Und wird dieser Bereich dann beim Beenden des Programmes automatisch wieder freigegeben (oder schon früher).</p>
<p>MfG <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/959808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/959808</guid><dc:creator><![CDATA[IWanTtOkNOw]]></dc:creator><pubDate>Sat, 07 Jan 2006 16:31:46 GMT</pubDate></item><item><title><![CDATA[Reply to return struct on Sat, 07 Jan 2006 16:49:04 GMT]]></title><description><![CDATA[<p>IWanTtOkNOw schrieb:</p>
<blockquote>
<p>Rein interessehalber, was kann passieren wenn man den mit <strong>new</strong> reservierten Speicherbereich nicht wieder freigibt?</p>
</blockquote>
<p>Moderne Betriebssysteme geben den Speicher nach Beendigung deines Programms wieder frei, wenn du es nicht tust. Allerdings sollte man sich nicht darauf verlassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/959822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/959822</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Sat, 07 Jan 2006 16:49:04 GMT</pubDate></item></channel></rss>