Übergabe von vector an Funktion (definiert in Klasse)



  • Hallo Ihr,

    ich bin ein C++ Neuling, daher handelt es sich wahrscheinlich um einen Anfängerfehler. Ich sitze schon den ganzen Tag an dem Problem und habe zig Foren durchforstet.

    Ich bekomme Fehlermeldungen beim kompilieren, grob liegt es an der Definition eines Vektors und dem anschließenden Aufruf.

    Hier erstmal meine main, body und header files:

    header.h

    #pragma once
    #include <iostream>
    
    using namespace std;
    
    class numericalIntegration
    {
    public:
    	numericalIntegration();		// constructor
    	virtual ~numericalIntegration();	//destructor
    
    	double integrate(double *x, double *y);
    private:
    };
    

    body

    #pragma once
    
    #include "header.h"
    #include <iostream>
    #include <string>
    #include <vector>
    #include <numeric>
    
    using namespace std;
    
    double numericalIntegration::integrate(double *x, double *y)
    {
    
    	double dx = x[2] - x[1];
    	//int noIntervals = sizeof(x) / sizeof(double);
    
    	int noIntervals = x.size();
    
    	vector<double> vecCoeff(noIntervals, 2);
    	vecCoeff[0] = 1;
    	vecCoeff[vecCoeff.size() - 1] = 1;	
    	vector<double> Y(noIntervals);
    
    	for (int i = 0; i < noIntervals; i++)
    	{
    		Y[i] = y[i];
    	}
    
    	double multVal = inner_product(vecCoeff.begin(), vecCoeff.end(), Y.begin(), 0.0);
    	double I = 0.5*dx*multVal;
    	return I;
    
    }
    
    numericalIntegration::numericalIntegration(){};
    numericalIntegration::~numericalIntegration(){};
    

    main:

    #include "header.h"
    #include <iostream>
    #include <vector>
    #include <iterator>
    
    using namespace std;
    
    //mock
    //double x[] = { 1, 2, 3, 4, 5 };
    double y[] = { 0.5, 0.5, 0.5, 0.5, 0.5 };
    
    double tmp[] = { 1, 2, 3, 4, 5 };
    std::vector<double> x(tmp, tmp + _countof(tmp));
    
    int main()
    {
    	numericalIntegration getArea;
    
    	double I = getArea.integrate(x, y);
    	cout << I;
    
    	return 0;
    
    }
    

    Es geht um numerische Integration von Messwerten. Diese sollen in einem vector liegen (siehe main) (später werden diese von extern geholt).
    Wenn ich das ganze in MS Visual Studio 13 kompilieren möchte, erhalte ich die
    Fehlermeldung

    Error	1	error C2664: 'double numericalIntegration::integrate(double *,double *)' : cannot convert argument 1 from 'std::vector<double,std::allocator<_Ty>>' to 'double *'	z:\gsa_implementation\integrator\integrator\main.cpp	21	1	Integrator
    

    und

    Error	2	error C2228: left of '.size' must have class/struct/union	z:\gsa_implementation\integrator\integrator\body.cpp	17	1	Integrator
    

    Habe es dabei schon mit x->size() versucht (siehe body).
    In VS sind x von x.size (in body) und x in double I = getArea.integrate(x, y); (in main) rot unterlegt.

    Vielen Dank schonmal für eure Hilfe!

    Sollte ich schon gegen irgendwelche Formalien verstoßen haben, werde ich mich in Zukunft bessern 😃

    Viele Grüße
    Johannes



  • Der Code passt nicht zur ersten Meldung.
    double* ist kein vector - was ist daran überraschend?

    double integrate(std::vector<double>& x, std::vectro<double>& y);
    

    Welchen Sinn hat die Klasse numericalIntegration? integrate ist eine simple Funktion und kann das auch bleiben. Und erst recht braucht man keine leeren Konstruktoren oder Destruktoren.



  • Vielen Dank für die schnelle Hilfe. Durch die veränderte Deklaration funktioniert es direkt.

    Wie gesagt, ich bin Neuling, deswegen die Geschichte mit dem Konstruktor, ich werde mich im Bezug Konstruktor, Destruktor nochmal einlesen.



  • Und wo hast du diesen Code geklaut?

    double tmp[] = { 1, 2, 3, 4, 5 };
    std::vector<double> x(tmp, tmp + _countof(tmp));
    

    Seit C++11 kannst du direkt

    std::vector<double> x = { 1, 2, 3, 4, 5 };
    

    schreiben.


Anmelden zum Antworten