Seite 1 von 1

[gelöst] Instanz an Klasse übergeben

Verfasst: 14. April 2018 07:56
von Tomaxx
Hallo zusammen

Ich habe ein Klasse "Betriebspunkt", die ich schon erfolgreich in meinem Programm verwende. Darin enthalten sind Menge und Druck sowie einige andere Daten, die ich jetzt gerne in einer zweiten Klasse "Kurve" verwenden möchte. Dazu würde ich gerne die Instanz der Klasse "Betriebspunkt" an die Klasse "Kurve" übergeben.

betriebspunkt.h:

Code: Alles auswählen

#ifndef BETRIEBSPUNKT_H
#define BETRIEBSPUNKT_H

#include <QMainWindow>
#include <QObject>

using namespace std;

class Betriebspunkt{
    double menge;
    QString menge_str;
    double hoehe;
    QString hoehe_str;
    double dichte;
    double visk;

public:
    Betriebspunkt();
    Betriebspunkt(double q, QString q_str, double h, QString h_str, double dens, double v = 1.0, QString v_str = "mm2/s");
    double get_m3h();
    double get_m();
    double get_bar();
};
betriebspunkt.cpp:

Code: Alles auswählen

#include <betriebspunkt.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <mainwindow.h>

using namespace std;
Betriebspunkt::Betriebspunkt(){}
Betriebspunkt::Betriebspunkt(double q,
                             QString q_str,
                             double h,
                             QString h_str,
                             double dens,
                             double v,
                             QString v_str){
    if (dens >= 0){
        set_kgm3(dens);
    }else{
        meldung("Dichte muss > 0 sein.");
    }

double Betriebspunkt::get_m3h(){
    return m3h;
}

double Betriebspunkt::get_m(){
    return m;
}

double Betriebspunkt::get_bar(){
    return bar;
}

kurve.h:

Code: Alles auswählen

#ifndef KURVE_H
#define KURVE_H

#include <QMainWindow>
#include <QObject>
#include <betriebspunkt.h>

class Kurve{
    Betriebspunkt bp;
    double qmin;
    double qmax;
    double q_opt;
    QVector<double> f_parameter;
    QVector<double> q_sonder;
public:
    Kurve();
    Kurve(Betriebspunkt bp,
          double qmin,
          double qmax,
          double q_opt,
          QVector<double> f_parameter,
          QVector<double> q_sonder);
};

#endif // KURVE_H
kurve.cpp:

Code: Alles auswählen

#include <kurve.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <mainwindow.h>
#include <betriebspunkt.h>

using namespace std;

Kurve::Kurve(Betriebspunkt bp,
             double qmin,
             double qmax,
             double q_opt,
             QVector<double> f_parameter,
             QVector<double> q_sonder){

    cout << "-->" << bp.get_qstr().toStdString() << "<--"<< endl;
    if(bp.get_m3h() > 0){
    	cout << "Wert ist vorhaenden" << endl;
    }
}

Und so wollte ich die Klassen initialisieren (bp_1 funktioniert):

Code: Alles auswählen

        Betriebspunkt bp_1{qbet,
                          "Text1",
                          hbet,
                          "Text2",
                          998,
                          1.5,
                          "mm2/s"};
        Kurve kurve_1{&bp_1,
                    40,
                    340,
                    qopt,
                    psetp,
                    swerte};
Leider klappt das nicht. Ich habe es versucht wie in den codes angegeben mit
..
Kurve::Kurve(Betriebspunkt bp,
..
if(bp.get_m3h() > 0){
..
Das Ergebnis:
Kompilieren geht durch, aber die Ausgabe von bp.get() ist leer.

Dann so:
..
Kurve::Kurve(Betriebspunkt &bp,
..
if(bp.get_m3h() > 0){
..

Das Ergebnis:
D:\dl\Dateien\Entwicklung\CPP\PPro\kurve.cpp:10: Fehler: uninitialized reference member in 'class Betriebspunkt&' [-fpermissive]
Kurve::Kurve(Betriebspunkt &bp,
^

Dann so:
..
Kurve::Kurve(Betriebspunkt *bp,
..
if(bp->get_m3h() > 0){
..

Das Ergebnis:
D:\dl\Dateien\Entwicklung\CPP\PPro\digitalisierung.cpp:111: Fehler: no matching function for call to 'Kurve::Kurve(<brace-enclosed initializer list>)'
swerte};
^

Ich weiss nicht weiter

Re: Instanz an Klasse übergeben

Verfasst: 14. April 2018 18:05
von Christian81
Der Kurve ctor möchte ein Objekt, du übergibst einen Pointer (&bp_1). Also entweder übergibst Du ein Objekt oder änderst den ctor dass er einen Pointer möchte.

Re: Instanz an Klasse übergeben

Verfasst: 16. April 2018 12:07
von Tomaxx
Leider klappt das nicht. Ich habe es versucht wie in den codes angegeben mit
..
Kurve::Kurve(Betriebspunkt bp,
..
if(bp.get_m3h() > 0){
..
Das Ergebnis:
Kompilieren geht durch, aber die Ausgabe von bp.get() ist leer.
Habe ich das nicht hiermit gemacht? Dann meckert der Compiler nicht, aber die aufgerufene Methode aus Betriebspunkt gibt einen Leerwert zurück.

Re: [gelöst] Instanz an Klasse übergeben

Verfasst: 16. April 2018 13:36
von Tomaxx
Habs gefunden.... Danke für die Hilfe.

Ich hatte den private Wert nicht korrekt gesetzt, also war er leer.

Thomas