<?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[Memberinstanzen fremder Klassen in einer klasse initialisieren]]></title><description><![CDATA[<p>Hallo Leute, ich bin noch blutiger C++-Anfänger und komme schon den ganzen Tag nicht weiter. Ich habe eine Klasse &quot;PT1&quot;, die u.a. als Membervariable ein Objekt m_integrator der Klasse &quot;Integrator&quot; besitzen soll. Sowohl ein Objekt der Klasse &quot;PT1&quot; als auch sein Memberobjekt m_integrator benötigt eine Initialisierung mit sinnvollen Werten.<br />
Ich weiß allgemein, dass man das mit</p>
<pre><code>klassenname::klassenname(datentyp startwert){
: m_variable(startwert)
}
</code></pre>
<p>macht. Das funktioniert soweit, wenn die Membervariablen einen &quot;primitiven&quot; Datentyp haben. Und wie mache ich das, wenn die Membervariablen Instanzen von ganz anderen Klassen sind? Hab schon stundenlang herumprobiert.</p>
<p>Vielleicht habe ich ja auch einen grundlegenden Designfehler drin. Vielleicht seht ihr ja auf Anhieb den Fehler.</p>
<p>Hier mein konkreter Code:</p>
<pre><code>//integrator.cpp
#include &quot;integrator.hpp&quot;

// integrator
integrator::integrator(double u0)
: m_u(u0)
{
    update_step(); //Initializing
}

integrator::~integrator() {}

double integrator::update_calc(double u_in)
{
    m_u = u_in;
    update_step();
    return m_y;
}

void integrator::update_step()
{
    m_y = m_y + m_u;
}
</code></pre>
<pre><code>//integrator.hpp
#ifndef INTEGRATOR_HPP
#define INTEGRATOR_HPP

class integrator
{
    public:
        integrator(double u0);
        virtual ~integrator();

        double update_calc(double u_input);

    private:
        double m_u;
        double m_y;
        double m_u0;

        void update_step(void);
};

#endif // INTEGRATOR_HPP
</code></pre>
<pre><code>//PT1.cpp

#include &quot;PT1.hpp&quot;

PT1::PT1(double a, double b, double u0)//: integrator(u0)
: m_a(a), m_b(b), m_u0(u0)//, integrator(u0)
{
    this-&gt;m_integrator1-&gt;Setu0(u0);
    this-&gt;m_integrator1-&gt;Setk(1.0);
    m_u = m_u0;
    m_y = m_u;
    update_step();
}

PT1::~PT1(){}

double PT1::update_calc(double u_in)
{
    m_u = u_in;
    update_step();
    return m_y;
}

void PT1::update_step() //core PT1 transfer function
{
        m_y = m_integrator1-&gt;update_calc(1/m_a*(m_u-m_b*m_y));
}
</code></pre>
<pre><code>//PT1.hpp
#ifndef PT1_HPP
#define PT1_HPP
#include &quot;integrator.hpp&quot;

class PT1
{
    public:
        PT1(double a, double b, double u0);
        virtual ~PT1();

        double update_calc(double u_input);

    private:
        //input and output signals
        double m_u;
        double m_y;

        //system parameters
        double m_a;
        double m_b;

        //initial conditions
        double m_u0;

        //subsystems
        integrator * m_integrator1;

        //transfer function
        void update_step(void);

};

#endif // PT1_HPP
</code></pre>
<pre><code>//main.cpp

Compiler findet keine Fehler/Warnungen.

int main()
{
integrator integrierer(1.0); //funktioniert

PT1 lowpass(1.0,1.0,0); //Programm stürzt ab

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/339739/memberinstanzen-fremder-klassen-in-einer-klasse-initialisieren</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Apr 2026 21:39:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/339739.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 24 Sep 2016 22:09:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Memberinstanzen fremder Klassen in einer klasse initialisieren on Sat, 24 Sep 2016 22:09:02 GMT]]></title><description><![CDATA[<p>Hallo Leute, ich bin noch blutiger C++-Anfänger und komme schon den ganzen Tag nicht weiter. Ich habe eine Klasse &quot;PT1&quot;, die u.a. als Membervariable ein Objekt m_integrator der Klasse &quot;Integrator&quot; besitzen soll. Sowohl ein Objekt der Klasse &quot;PT1&quot; als auch sein Memberobjekt m_integrator benötigt eine Initialisierung mit sinnvollen Werten.<br />
Ich weiß allgemein, dass man das mit</p>
<pre><code>klassenname::klassenname(datentyp startwert){
: m_variable(startwert)
}
</code></pre>
<p>macht. Das funktioniert soweit, wenn die Membervariablen einen &quot;primitiven&quot; Datentyp haben. Und wie mache ich das, wenn die Membervariablen Instanzen von ganz anderen Klassen sind? Hab schon stundenlang herumprobiert.</p>
<p>Vielleicht habe ich ja auch einen grundlegenden Designfehler drin. Vielleicht seht ihr ja auf Anhieb den Fehler.</p>
<p>Hier mein konkreter Code:</p>
<pre><code>//integrator.cpp
#include &quot;integrator.hpp&quot;

// integrator
integrator::integrator(double u0)
: m_u(u0)
{
    update_step(); //Initializing
}

integrator::~integrator() {}

double integrator::update_calc(double u_in)
{
    m_u = u_in;
    update_step();
    return m_y;
}

void integrator::update_step()
{
    m_y = m_y + m_u;
}
</code></pre>
<pre><code>//integrator.hpp
#ifndef INTEGRATOR_HPP
#define INTEGRATOR_HPP

class integrator
{
    public:
        integrator(double u0);
        virtual ~integrator();

        double update_calc(double u_input);

    private:
        double m_u;
        double m_y;
        double m_u0;

        void update_step(void);
};

#endif // INTEGRATOR_HPP
</code></pre>
<pre><code>//PT1.cpp

#include &quot;PT1.hpp&quot;

PT1::PT1(double a, double b, double u0)//: integrator(u0)
: m_a(a), m_b(b), m_u0(u0)//, integrator(u0)
{
    this-&gt;m_integrator1-&gt;Setu0(u0);
    this-&gt;m_integrator1-&gt;Setk(1.0);
    m_u = m_u0;
    m_y = m_u;
    update_step();
}

PT1::~PT1(){}

double PT1::update_calc(double u_in)
{
    m_u = u_in;
    update_step();
    return m_y;
}

void PT1::update_step() //core PT1 transfer function
{
        m_y = m_integrator1-&gt;update_calc(1/m_a*(m_u-m_b*m_y));
}
</code></pre>
<pre><code>//PT1.hpp
#ifndef PT1_HPP
#define PT1_HPP
#include &quot;integrator.hpp&quot;

class PT1
{
    public:
        PT1(double a, double b, double u0);
        virtual ~PT1();

        double update_calc(double u_input);

    private:
        //input and output signals
        double m_u;
        double m_y;

        //system parameters
        double m_a;
        double m_b;

        //initial conditions
        double m_u0;

        //subsystems
        integrator * m_integrator1;

        //transfer function
        void update_step(void);

};

#endif // PT1_HPP
</code></pre>
<pre><code>//main.cpp

Compiler findet keine Fehler/Warnungen.

int main()
{
integrator integrierer(1.0); //funktioniert

PT1 lowpass(1.0,1.0,0); //Programm stürzt ab

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2509628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2509628</guid><dc:creator><![CDATA[MrFragezeichen]]></dc:creator><pubDate>Sat, 24 Sep 2016 22:09:02 GMT</pubDate></item><item><title><![CDATA[Reply to Memberinstanzen fremder Klassen in einer klasse initialisieren on Sat, 24 Sep 2016 22:13:04 GMT]]></title><description><![CDATA[<p>Warum ist m_integrator1 ein Pointer?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2509629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2509629</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sat, 24 Sep 2016 22:13:04 GMT</pubDate></item><item><title><![CDATA[Reply to Memberinstanzen fremder Klassen in einer klasse initialisieren on Sat, 24 Sep 2016 22:22:12 GMT]]></title><description><![CDATA[<p>@manni:<br />
Ja, das ist eine gute Frage. Ich habe es erst ohne probiert, aber da bekomme ich die Fehlermeldung<br />
&quot;In constructor 'PT1::PT1(double, double, double)'<br />
error: no matching function for call to 'integrator::integrator()'|&quot;<br />
Als ich den Pointer hingesetzt habe, hat wenigstens das Kompilieren geklappt. Scheint so aber auch keine Lösung zu sein...</p>
<p>Ups, noch 'ne Kleinigkeit:<br />
Habe der Übersicht halber alle Get und Set-Methoden hier herausgelöscht.</p>
<pre><code>this-&gt;m_integrator1-&gt;Setu0(u0); 
    this-&gt;m_integrator1-&gt;Setk(1.0);
</code></pre>
<p>würde dann natürlich nicht funktionieren. Denkt euch die oben Zitierten wegkommentiert oder alle Get und Set-Methoden als vorhanden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2509630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2509630</guid><dc:creator><![CDATA[MrFragezeichen]]></dc:creator><pubDate>Sat, 24 Sep 2016 22:22:12 GMT</pubDate></item><item><title><![CDATA[Reply to Memberinstanzen fremder Klassen in einer klasse initialisieren on Sat, 24 Sep 2016 22:28:48 GMT]]></title><description><![CDATA[<p>Warum wendest du nicht dein allgemeines Wissen an?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2509631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2509631</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sat, 24 Sep 2016 22:28:48 GMT</pubDate></item><item><title><![CDATA[Reply to Memberinstanzen fremder Klassen in einer klasse initialisieren on Sat, 24 Sep 2016 22:39:52 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Warum wendest du nicht dein allgemeines Wissen an?</p>
</blockquote>
<p>Hast 'nen Tipp? <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>
<p>Muss ich die Klasse &quot;Integrator&quot; an die Klasse &quot;PT1&quot; vererben oder ist das so schon ok, wie ich das im Prinzip gemacht habe?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2509632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2509632</guid><dc:creator><![CDATA[MrFragezeichen]]></dc:creator><pubDate>Sat, 24 Sep 2016 22:39:52 GMT</pubDate></item><item><title><![CDATA[Reply to Memberinstanzen fremder Klassen in einer klasse initialisieren on Sat, 24 Sep 2016 22:42:27 GMT]]></title><description><![CDATA[<p>Das war einer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2509634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2509634</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sat, 24 Sep 2016 22:42:27 GMT</pubDate></item></channel></rss>