[gelöst] Instanz an Klasse übergeben

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
Tomaxx
Beiträge: 49
Registriert: 7. Juni 2017 09:05

[gelöst] Instanz an Klasse übergeben

Beitrag von Tomaxx » 14. April 2018 07:56

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
Zuletzt geändert von Tomaxx am 16. April 2018 13:35, insgesamt 1-mal geändert.

Christian81
Beiträge: 7245
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Instanz an Klasse übergeben

Beitrag von Christian81 » 14. April 2018 18:05

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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung

Tomaxx
Beiträge: 49
Registriert: 7. Juni 2017 09:05

Re: Instanz an Klasse übergeben

Beitrag von Tomaxx » 16. April 2018 12:07

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.

Tomaxx
Beiträge: 49
Registriert: 7. Juni 2017 09:05

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

Beitrag von Tomaxx » 16. April 2018 13:36

Habs gefunden.... Danke für die Hilfe.

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

Thomas

Antworten