<?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[Klassenvariable mit Parametern im Konstruktor]]></title><description><![CDATA[<p>Servus,</p>
<p>ich bin gerade dabei, meine ersten Schritte mit C++ für AVR Controller zu machen und bin auf eine Problem gestoßen:</p>
<p>Ich würde gerne die angeschlossene Peripherie als Klassenvariablen anlegen und im Konstruktor der Hardware zuweisen (siehe erstes Codebeispiel Zeile 31). Leider bekomme ich eine Fehlermeldung vom Compiler (ich benutze AVR Studio 6 und den gcc Compiler)</p>
<p>Wenn ich die Variable direkt in der main() anlege, funktioniert es und die LED auf meinem Board leuchtet (siehe zweites Codebeispiel).</p>
<p>Warum kann ich ich Klassenvariablen keine Konstruktoren mit Parametern verwenden?</p>
<p>Ich weiß das hier ist kein AVR Forum, aber ich denke das beschriebene Problem ist ein generelles C++ Problem. Vielleicht kann mir ja jemand helfen. Vielen Dank schonmal <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>
<pre><code>#define F_CPU 8000000
#define MCU AT90USB1286
#include &lt;avr\io.h&gt;

class LED
{
	public:
	void init()	{*(&amp;port - 1) |= (1 &lt;&lt; bit); off();}
	void on()	{port &amp;= ~(1 &lt;&lt; bit);}
	void off()	{port |= (1 &lt;&lt; bit);}
	LED(volatile uint8_t &amp; port_temp, unsigned char bit_temp) : port(port_temp), bit(bit_temp) { }
	~LED() { }

	protected:
	volatile uint8_t&amp; port;
	unsigned char bit;
};

class Controller
{
	public:
	void main()
	{
		LED_Red.init();
		LED_Red.on();	
	}
	Controller()  { }
	~Controller() { }

	protected:
	LED LED_Red(PORTA,7);       //  Das funktioniert so nicht

};

Controller app;

main (void)
{
app.main();
}
</code></pre>
<pre><code>...

class Controller
{
	public:
	void main()
	{	
		LED LED_Red(PORTA,7);       //  Das funktioniert
		LED_Red.init();
		LED_Red.on();	
	}
	Controller()  { }
	~Controller() { }
};

Controller app;

main (void)
{
app.main();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/313901/klassenvariable-mit-parametern-im-konstruktor</link><generator>RSS for Node</generator><lastBuildDate>Sat, 01 Aug 2026 20:57:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/313901.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 13 Feb 2013 13:31:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klassenvariable mit Parametern im Konstruktor on Wed, 13 Feb 2013 13:31:38 GMT]]></title><description><![CDATA[<p>Servus,</p>
<p>ich bin gerade dabei, meine ersten Schritte mit C++ für AVR Controller zu machen und bin auf eine Problem gestoßen:</p>
<p>Ich würde gerne die angeschlossene Peripherie als Klassenvariablen anlegen und im Konstruktor der Hardware zuweisen (siehe erstes Codebeispiel Zeile 31). Leider bekomme ich eine Fehlermeldung vom Compiler (ich benutze AVR Studio 6 und den gcc Compiler)</p>
<p>Wenn ich die Variable direkt in der main() anlege, funktioniert es und die LED auf meinem Board leuchtet (siehe zweites Codebeispiel).</p>
<p>Warum kann ich ich Klassenvariablen keine Konstruktoren mit Parametern verwenden?</p>
<p>Ich weiß das hier ist kein AVR Forum, aber ich denke das beschriebene Problem ist ein generelles C++ Problem. Vielleicht kann mir ja jemand helfen. Vielen Dank schonmal <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>
<pre><code>#define F_CPU 8000000
#define MCU AT90USB1286
#include &lt;avr\io.h&gt;

class LED
{
	public:
	void init()	{*(&amp;port - 1) |= (1 &lt;&lt; bit); off();}
	void on()	{port &amp;= ~(1 &lt;&lt; bit);}
	void off()	{port |= (1 &lt;&lt; bit);}
	LED(volatile uint8_t &amp; port_temp, unsigned char bit_temp) : port(port_temp), bit(bit_temp) { }
	~LED() { }

	protected:
	volatile uint8_t&amp; port;
	unsigned char bit;
};

class Controller
{
	public:
	void main()
	{
		LED_Red.init();
		LED_Red.on();	
	}
	Controller()  { }
	~Controller() { }

	protected:
	LED LED_Red(PORTA,7);       //  Das funktioniert so nicht

};

Controller app;

main (void)
{
app.main();
}
</code></pre>
<pre><code>...

class Controller
{
	public:
	void main()
	{	
		LED LED_Red(PORTA,7);       //  Das funktioniert
		LED_Red.init();
		LED_Red.on();	
	}
	Controller()  { }
	~Controller() { }
};

Controller app;

main (void)
{
app.main();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2298614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298614</guid><dc:creator><![CDATA[Johannes T]]></dc:creator><pubDate>Wed, 13 Feb 2013 13:31:38 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenvariable mit Parametern im Konstruktor on Wed, 13 Feb 2013 13:34:14 GMT]]></title><description><![CDATA[<p>Nimm die Konstruktor-Initialisierungsliste:</p>
<pre><code>Controller::Controller()
: LED_Red(PORTA,7)
{
}
</code></pre>
<p>Leere Defaultkonstruktoren und Destruktoren musst du übrigens nicht definieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298616</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 13 Feb 2013 13:34:14 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenvariable mit Parametern im Konstruktor on Wed, 13 Feb 2013 13:39:52 GMT]]></title><description><![CDATA[<p>Im oberen Listing versuchst du eine Methode zu deklarieren und nutzt 7 als Typ, was natürlich nicht geht...<br />
Im unteren Listing erstellst du eine neue Instanz von <code>LED</code> und rufst den Konstruktor auf.<br />
Ich weiss nicht ganz was die beiden Listings miteinander zu tun haben...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298620</guid><dc:creator><![CDATA[MarcoYolo]]></dc:creator><pubDate>Wed, 13 Feb 2013 13:39:52 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenvariable mit Parametern im Konstruktor on Wed, 13 Feb 2013 13:52:50 GMT]]></title><description><![CDATA[<p>Hallo Nexus,</p>
<p>vielen Dank für den Tipp, so funktioniert es.</p>
<p>@ MarcoYolo: Ich wollte im Oberen Listing keine Methode deklarieren. Zugegebenermaßen sieht es von der Synthax so aus. Das was ich eigentlich wollte ist das, was es jetzt tut:</p>
<pre><code>class Controller
{

	public:
	void main()
	{	

		LED_Red.init();
		LED_Red.on();	
	}
	Controller()  : LED_Red(PORTA,7) { }

	protected:
		LED LED_Red;

};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2298633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298633</guid><dc:creator><![CDATA[Johannes T]]></dc:creator><pubDate>Wed, 13 Feb 2013 13:52:50 GMT</pubDate></item></channel></rss>