Seite 1 von 1
Probleme mit QVector
Verfasst: 5. Mai 2012 22:20
von dolin93
Hallo,
weil ein ähnliches Programm mit QList läuft, wollte ich mit QVector zwei eindimensionale Felder bzw. Vektoren in einer Klasse addieren. Leider gibt es die unten angegebenen Fehlermeldungen. Kann mir jemand mitteilen, was ich ändern muß?
Code: Alles auswählen
#include <QtCore/QCoreApplication>
#include "matdemo.h"
#include <iostream>
#include <QVector>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
double x[5]={1.1,2.2,3.3,4.4,5.5};
double y[5]={2.2,4.4,6.6,8.8,11.0};
QVector<double>v1(5);
;
for(int i=0;i<5;i++)
{v1.push_back(x[i]);
}
QVector<double> v2(5);
for(int i=0;i<5;i++)
{v2.push_back(y[i]);
}
MatDemo demo(v1,v2);
QVector<double> result(5);
demo.addiereVec(result);
for(int i=0;i<5;i++)
{
std::cout<<" "<<result[i];
}
return a.exec();
}
#ifndef MATDEMO_H //Header-Datei
#define MATDEMO_H
#include <QVector>
class MatDemo
{
public:
MatDemo(const double &v1, const double &v2);
void addiereVec(double &result);
private:
double p_in_v1;
double p_in_v2;
};
#endif // MATDEMO_H
#include "matdemo.h" //Quelldatei
#include <QObject>
MatDemo::MatDemo(const double &v1, const double &v2):p_in_v1(v1),p_in_v2(v2)
{
}
void MatDemo::addiereVec(double &result)
{for(int i=0;i<5;i++)
{R[i]=p_in_v1[i]+p_in_v2[i];
result.push_back(R[i]);
}
}
Code: Alles auswählen
main.cpp:20: error: no matching function for call to ‘MatDemo::MatDemo(QVector<double>&, QVector<double>&)’
main.cpp:22: error: no matching function for call to ‘MatDemo::addiereVec(QVector<double>&)’
Re: Probleme mit QVector
Verfasst: 5. Mai 2012 22:28
von Christian81
"const double &v1" ist eben nicht "QVector<double>"
const double & erwartet einen einzigen double-Wert der als Referenz übergeben wird und Du möchtest einen QVector<double> übergeben. Also pass Deinen Übergabeparameter an und fertig. Dann musst Du auch nicht hart die '5' codieren sondern kannst QVector::size() benutzen.
Re: Probleme mit QVector
Verfasst: 7. Mai 2012 17:18
von dolin93
Vielen Dank für Deine Antwort!
Wenn ich, wie von Dir empfohlen, const double &v1 durch QVector<double> &v1 ersetze und mit const double &v2 und double &result ähnlich verfahre, dann bleiben die Fehlermeldungen unverändert.
Mit der Vorgehensweise aus C:
Code: Alles auswählen
#include <QtCore/QCoreApplication>
#include <iostream>
#include <cmath>
#include "addition.h"
using namespace std;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
double A[4]={1.1, 2.2, 3.3, 4.4};
double b[4]={5.5, 6.6, 7.7, 8.8};
double* Zeiger= Addition::Addieren(A,b);
for(int i=0;i<4;i++)
{cout<<" "<<*(Zeiger+i)<<endl;
}
return a.exec();
}
#ifndef ADDITION_H
#define ADDITION_H
class Addition
{
public:
//double u[4];
Addition();
static double* Addieren(double a1[],double a2[]);
};
#endif // ADDITION_H
#include <iostream>
#include <cmath>
#include "addition.h"
using namespace std;
double u[4];
double* Addition::Addieren(double a1[], double a2[])
{
for(int i=0; i<4; i++)
{u[i]=a1[i]+a2[i];
}
return &u[0];
}
gibt es da keine Probleme.
Wie man in C++ und in Qt elegant int- oder double-Werte übergibt, sieht man in allen einschlägigen Büchern immer wieder, aber wie man Vektoren etc. transportiert leider nicht.
Re: Probleme mit QVector
Verfasst: 7. Mai 2012 17:36
von Christian81
Und was für Fehlermeldungen kommen genau? Bzw. wie sieht Dein Code aus?
Wie man in C++ und in Qt elegant int- oder double-Werte übergibt, sieht man in allen einschlägigen Büchern immer wieder, aber wie man Vektoren etc. transportiert leider nicht.
Das liegt wohl daran dass dort das Verfahren haargenau das Gleiche ist...
btw: Bitte benutze die [
Re: Probleme mit QVector
Verfasst: 7. Mai 2012 18:51
von franzf
Christian81 hat geschrieben:btw: Bitte benutze die [
Code: Alles auswählen
]-Tags[/quote]
Ich hab die einfach mal ganz frech eingefügt ;)
[quote="dolin93"]Wenn ich, wie von Dir empfohlen, const double &v1 durch QVector<double> &v1 ersetze und mit const double &v2 und double &result ähnlich verfahre, dann bleiben die Fehlermeldungen unverändert.[/quote]
Das bezweifle ich. Bitte poste IMMER den Code, der Probleme macht + die komplette Fehlermeldung. Eine Beschreibung abgeben ohne Code, und dann noch Code posten der funktioniert, aber ganz anders arbeitet, bringt leider gar nichts.
Re: Probleme mit QVector
Verfasst: 8. Mai 2012 10:34
von RHBaum
Wie man in C++ und in Qt elegant int- oder double-Werte übergibt, sieht man in allen einschlägigen Büchern immer wieder, aber wie man Vektoren etc. transportiert leider nicht.
Naja !
1. fuer alle Typen expliziet wirst das nicht finden, weil sich wirklich nur der Typ aendert.
2. Im Stroustrup gibts ganz kurz was, ich glaub im Artikel zu referenzen
3. einige andere Literatur, effective c++, execpional c++, modern c++ usw behandeln das thema abstrakt auch, im zusammenhang mit lifecycles, threading probleme etc.
Also konkret dafuer artikel gibts nicht, was zu trivial ist, aber in zusammenhang mit komplexeren themen gibts da scho was !
Und generell den besten Weg gibts nicht, sondern der ist immer situational ! Manchmal kann die Kopie der einzig sichere Weg sein (multithreading z.b. )
Ciao ...
Re: Probleme mit QVector
Verfasst: 9. Mai 2012 19:00
von dolin93
Vielen Dank für Eure Antworten!
Der Grund, warum nach der Änderung immer noch die Fehlermeldungen aufgetreten sind, ist anscheinend, daß ich QVector<double<v1(5) etc. geschrieben habe anstatt QVector<double<v1 etc.. Mittlerweilen läuft das folgende Programm, worüber ich sehr froh bin.
Code: Alles auswählen
#include <QtCore/QCoreApplication>
#include "matdemo.h"
#include <iostream>
#include <QVector>
int main(int argc, char *argv[])
{ typedef QVector<double> vec;
QCoreApplication a(argc, argv);
double x[5]={1.1,2.2,3.3,4.4,5.5};
double y[5]={2.2,4.4,6.6,8.8,11.0};
QVector<double>v1;
;
for(int i=0;i<5;i++)
{v1.push_back(x[i]);
}
vec v3;
v3.push_back(9.99);
QVector<double> v2;
for(int i=0;i<5;i++)
{v2.push_back(y[i]);
v3.push_back(y[i]);
std::cout<<" i="<<i<<" v1="<<v1[i]<<" x[i]="<<x[i]<<" v3="<<v3[i]<<std::endl;
}
MatDemo demo(v1,v2);
QVector<double> result;
demo.addiereVec(result);
for(int i=0;i<5;i++)
{
std::cout<<" result[i]="<<result[i]<<std::endl;
}
return a.exec();
}
#ifndef MATDEMO_H
#define MATDEMO_H
#include <QVector>
class MatDemo
{
public:
MatDemo(const QVector<double> &v1, const QVector<double> &v2);
void addiereVec(QVector<double> &result);
private:
QVector<double>_v1;
QVector<double>_v2;
};
#endif // MATDEMO_H
#include "matdemo.h"
#include <QObject>
#include <iostream>
MatDemo::MatDemo(const QVector<double> &v1, const QVector<double> &v2) : _v1(v1), _v2(v2)
{
}
void MatDemo::addiereVec(QVector<double> &result)
{for(int i=0;i<5;i++)
{
result.push_back(_v1[i]+_v2[i]);
std::cout<<" result[i]="<<result[i]<<" _v1[i]="<<_v1[i]<<std::endl;
}
}
[/quote]
Re: Probleme mit QVector
Verfasst: 10. Mai 2012 06:30
von Christian81
Jetzt mach aus "i < 5" noch ein "i < v1.size() && i < v2.size()" und es crasht auch nicht wenn weniger als 5 Elemente in den Vektoren sind.