<?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[struct übergeben]]></title><description><![CDATA[<p>Ich möchte einen struct übergeben, also sowas wie</p>
<p>THzMessungDlg.cpp</p>
<pre><code class="language-cpp">ThzMeasurement*  Measurement = new ThzMeasurement(theApp.Verschiebetisch, &amp;theApp.Settings);
</code></pre>
<p>mit<br />
ThzMessung.h</p>
<pre><code class="language-cpp">class CTHzMessungApp : public CWinApp
{
public:
	CTHzMessungApp();
	~CTHzMessungApp();
...
private:
	struct structSettings {
		MicosSettings micos;
	};

public:
	MicosPosCtrl* Verschiebetisch;
	structSettings Settings;
};
</code></pre>
<p>ThzMeasurement.h</p>
<pre><code class="language-cpp">// Geräte
#include &quot;MicosPosCtrl.h&quot;
// Einstellungen
#include &quot;MicosSettings.h&quot;

class ThzMeasurement
{
private:
struct structSettings 
	{
		MicosSettings micos;
	};

public:
	ThzMeasurement(MicosPosCtrl* newVerschiebetisch, structSettings* newSettings);
	~ThzMeasurement(void);

private:
	int m_Status;
	MicosPosCtrl* Verschiebetisch;
	structSettings* Settings;

};
</code></pre>
<p>ThzMeasurement.cpp</p>
<pre><code class="language-cpp">#include &quot;ThzMeasurement.h&quot;

ThzMeasurement::ThzMeasurement(MicosPosCtrl* newVerschiebetisch, structSettings &amp; newSettings)
{
	Verschiebetisch = newVerschiebetisch;
	Settings = newSettings;
}
</code></pre>
<p>das führt allerdings zu dem Fehler:</p>
<blockquote>
<p>1&gt;z:\cpp\thz\thzmessung\thzmessung\thzmessungdlg.cpp(131) : error C2664: 'ThzMeasurement::ThzMeasurement(MicosPosCtrl *,ThzMeasurement::structSettings *)': Konvertierung des Parameters 2 von 'CTHzMessungApp::structSettings *__w64 ' in 'ThzMeasurement::structSettings *' nicht möglich<br />
1&gt; Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.</p>
</blockquote>
<p>wie löse ich dieses Problem ?</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/190508/struct-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 15:26:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/190508.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 23 Aug 2007 13:54:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to struct übergeben on Thu, 23 Aug 2007 13:54:35 GMT]]></title><description><![CDATA[<p>Ich möchte einen struct übergeben, also sowas wie</p>
<p>THzMessungDlg.cpp</p>
<pre><code class="language-cpp">ThzMeasurement*  Measurement = new ThzMeasurement(theApp.Verschiebetisch, &amp;theApp.Settings);
</code></pre>
<p>mit<br />
ThzMessung.h</p>
<pre><code class="language-cpp">class CTHzMessungApp : public CWinApp
{
public:
	CTHzMessungApp();
	~CTHzMessungApp();
...
private:
	struct structSettings {
		MicosSettings micos;
	};

public:
	MicosPosCtrl* Verschiebetisch;
	structSettings Settings;
};
</code></pre>
<p>ThzMeasurement.h</p>
<pre><code class="language-cpp">// Geräte
#include &quot;MicosPosCtrl.h&quot;
// Einstellungen
#include &quot;MicosSettings.h&quot;

class ThzMeasurement
{
private:
struct structSettings 
	{
		MicosSettings micos;
	};

public:
	ThzMeasurement(MicosPosCtrl* newVerschiebetisch, structSettings* newSettings);
	~ThzMeasurement(void);

private:
	int m_Status;
	MicosPosCtrl* Verschiebetisch;
	structSettings* Settings;

};
</code></pre>
<p>ThzMeasurement.cpp</p>
<pre><code class="language-cpp">#include &quot;ThzMeasurement.h&quot;

ThzMeasurement::ThzMeasurement(MicosPosCtrl* newVerschiebetisch, structSettings &amp; newSettings)
{
	Verschiebetisch = newVerschiebetisch;
	Settings = newSettings;
}
</code></pre>
<p>das führt allerdings zu dem Fehler:</p>
<blockquote>
<p>1&gt;z:\cpp\thz\thzmessung\thzmessung\thzmessungdlg.cpp(131) : error C2664: 'ThzMeasurement::ThzMeasurement(MicosPosCtrl *,ThzMeasurement::structSettings *)': Konvertierung des Parameters 2 von 'CTHzMessungApp::structSettings *__w64 ' in 'ThzMeasurement::structSettings *' nicht möglich<br />
1&gt; Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.</p>
</blockquote>
<p>wie löse ich dieses Problem ?</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1350525</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1350525</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Thu, 23 Aug 2007 13:54:35 GMT</pubDate></item><item><title><![CDATA[Reply to struct übergeben on Thu, 23 Aug 2007 14:05:12 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>... indem Du dieselbe Klasse nimmst, wenn Du dieselbe Klasse nehmen willst. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
Wie die COmpiler Fehlermeldung schon sagt, sind A::X und B::X vollkommen unterschiedliche Klassen, die nichts miteinander zu tun haben .... auch wenn sie beide X heißen und von Dir vielleicht auf dieselben Member bekommen.</p>
<p>Lösung A : structSettings aus den Klassen in den umgebenden namespace lösen.</p>
<p>Lösung B : &quot;gegenseitige Konstruktoren&quot; bauen:</p>
<pre><code class="language-cpp">class CTHzMessungApp : public CWinApp
{
    struct structSettings {
        structSettings(ThzMeasurement::structSettings const&amp; m) : micos(m.micos) {}
        MicosSettings micos;
    };
...
</code></pre>
<p>Hier müsstest Du allerdings Deinen &quot;private&quot;-Schutz aufgeben (zumindestens &quot;befrienden&quot;) und sollest auch passende operator=() implementieren. Ich glaube mal, dass Du das nicht brauchst/willst.</p>
<p>Ach ja: Kommst Du von Java oder warum hantierst Du so viel mit new ?</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1350534</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1350534</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 23 Aug 2007 14:05:12 GMT</pubDate></item><item><title><![CDATA[Reply to struct übergeben on Thu, 23 Aug 2007 14:06:09 GMT]]></title><description><![CDATA[<p>Bevor dann nachher die naechste Frage kommt:<br />
Du deklarierst den Konstruktor von <code>ThzMeasurement</code> mit einem Pointer aud <code>structSettings</code> als Agrument, definierst ihn in der cpp aber mit einer Referenz als Argument. Das solltest du fixen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1350538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1350538</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 23 Aug 2007 14:06:09 GMT</pubDate></item><item><title><![CDATA[Reply to struct übergeben on Thu, 23 Aug 2007 14:34:09 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Hi,<br />
... indem Du dieselbe Klasse nimmst, wenn Du dieselbe Klasse nehmen willst. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>schon klar, nur die Lösung war mir nicht offensichtlich.</p>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Lösung A : structSettings aus den Klassen in den umgebenden namespace lösen.</p>
</blockquote>
<p>verstehe ich nicht.<br />
Wenn ich structSettings nicht in der Klasse definiere ist es in der nächsten Klasse nicht mehr bekannt und wenn ich es dort ebenfalls nicht in der Klasse definere ist es zweimal definiert.</p>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Lösung B : &quot;gegenseitige Konstruktoren&quot; bauen:</p>
<pre><code class="language-cpp">class CTHzMessungApp : public CWinApp
{
    struct structSettings {
        structSettings(ThzMeasurement::structSettings const&amp; m) : micos(m.micos) {}
        MicosSettings micos;
    };
...
</code></pre>
<p>Hier müsstest Du allerdings Deinen &quot;private&quot;-Schutz aufgeben (zumindestens &quot;befrienden&quot;) und sollest auch passende operator=() implementieren. Ich glaube mal, dass Du das nicht brauchst/willst.</p>
</blockquote>
<p>Kannst du das weiter erläutern. Ich verstehe das Konstrukt nämlich nicht.</p>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Ach ja: Kommst Du von Java oder warum hantierst Du so viel mit new ?</p>
</blockquote>
<p>Nein ich habe von Java praktisch gar keine Ahnung</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1350553</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1350553</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Thu, 23 Aug 2007 14:34:09 GMT</pubDate></item><item><title><![CDATA[Reply to struct übergeben on Thu, 23 Aug 2007 14:45:21 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>OK, dann mal Lösung A (finde ich sowieso besser ;):</p>
<p>structSettings.h</p>
<pre><code class="language-cpp">struct structSettings {
   MicosSettings micos;
};
</code></pre>
<p>CTHzMessungDlg.cpp</p>
<pre><code class="language-cpp">#include &quot;CThzMessungApp.h&quot;
CTHzMessungApp theApp;
ThzMeasurement  Measurement(theApp.Verschiebetisch, theApp.Settings);
</code></pre>
<p>(Ich denke mal, dass Du hier keine globalen Variablen anlegst, oder doch ? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> )</p>
<p>mit<br />
CThzMessungApp.h</p>
<pre><code class="language-cpp">#include &quot;structSettings.h&quot;
class CTHzMessungApp : public CWinApp
{
public:
   structSettings Settings;
};
</code></pre>
<p>ThzMeasurement.h</p>
<pre><code class="language-cpp">// Geräte
#include &quot;MicosPosCtrl.h&quot;
// Einstellungen
#include &quot;MicosSettings.h&quot;

#include &quot;stuctSettings.h&quot;
class ThzMeasurement
{
public:
   ThzMeasurement(MicosPosCtrl* newVerschiebetisch, structSettings const&amp; newSettings); 
private:
   int m_Status;
   MicosPosCtrl* Verschiebetisch;
   structSettings Settings;
};
</code></pre>
<p>ThzMeasurement.cpp</p>
<pre><code class="language-cpp">#include &quot;ThzMeasurement.h&quot;

ThzMeasurement::ThzMeasurement(MicosPosCtrl* newVerschiebetisch, structSettings const&amp; newSettings)
      : m_Status(0), Verschiebetisch(newVerschiebetisch), Settings(newSettings) {} // s.&quot;Initialisierungsliste&quot;
</code></pre>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1350566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1350566</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 23 Aug 2007 14:45:21 GMT</pubDate></item><item><title><![CDATA[Reply to struct übergeben on Thu, 23 Aug 2007 14:51:03 GMT]]></title><description><![CDATA[<p>Wenn du <code>structSettings</code> im umgebenden namespace vor deinen Klassen deklarierst ist sie in jeder der Klassen bekannt. Dann darfst du es allerdings nicht in einer der Klassen neu deklarieren, dann haettest du wieder zwei verschiedene structs mit dem gleichen Namen.</p>
<p>Die Loesung B ist ein Umwandlungskonstruktor. das Struct A::structSettings kann einem B::structSettings als Konsturktorargument uebergeben werden und umgekehrt, wenn du die entsprechenden Konstruktoren definierst. Dann kannst du, wenn du das eine von beiden erwartest, das andere uebergeben. Es wird dann dank des vorhandenen Konstruktors implizit umgewandelt. Dazu muss aber bei beiden Klassen structSettings public deklariert sein (muss es sowieso wenn du es wie geplant an deinen Konstruktor uebergeben willst). Ich halte das aber fuer keine so elegante Loesung, weil es erstens die Typsicherheit aufweicht und zweitens nur ein etwas undurchdachtes Design verschlimmbessert.</p>
<p>Ich wuerde folgendes machen:<br />
Da deine beiden KLassen nicht nur einen sehr aehnlichen Namen sondern auch gleiche Member haben, vermute ich, dass sie eng miteinander verwand sind. Da bietet sich eine gemeinsame Klassenhierarchie oder eine Komposition von Klassen an.<br />
Wenn das structSettings ein wichtiger Bestandteil beider Klassen ist, solltest du auch es als ein einzxelnes Konzept behandeln, nicht als zwei private Konzepte von zwei Klassen, die fuer den Compiler nichts miteinander zu tun haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1350575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1350575</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 23 Aug 2007 14:51:03 GMT</pubDate></item></channel></rss>