2017-02-04 2 views
2

Diese Frage kann rausgeworfen werden, aber ich habe gesucht und auf der Suche nach Hilfe zu diesem Thema. Ich bin ein totaler Anfänger .. OK: Ich habe eine Template-Klasse mit einer Funktion, die zwei Vektoren und Ausgaben zu einem dritten Vektor hinzufügt. Ich muss anrufen, wenn aus meinem Hauptprogramm. Hier ist meine Vorlage (sehr einfach).C++ Vorlage: kann meine Funktion nicht von main.cpp aufrufen

#include <vector> 
#include<iostream> 
#include<iomanip> 
#include<algorithm> 
using namespace std; 

template<class T> 
class polyClass { 
public: 
    //position 0 always constant, pos1 x^1, pos2 x^2 
    vector<T> a; 
    vector<T> b; 
    vector<T> result; 

    int addVectors(T& a, T& b, T& result) { 

     for (vector<T> i = a[i].begin; i != a[i].end(); i++) { 

      result[i] = a[i] + b[i]; 
      return result; 

     } 
    } 
}; 

Ich muss die AddVectors Funktion aus meinem Hauptprogramm aufrufen. Und ich bekomme immer wieder die Nachricht, dass ich in diesem Bereich nicht 'a', 'b' und 'result' deklariert habe. Ich mache damit 3 Stunden und könnte wirklich Hilfe gebrauchen. Hier ist mein Hauptprogramm.

#include <iostream> 
#include<vector> 
using namespace std; 
#include "PolynomMult_Add.h" 

int main() { 

    polyClass<int> newPolyClass; 
    newPolyClass.a = {3, 4, 2}; 
    newPolyClass.b = {3, 3, 1}; 
    newPolyClass.result = {}; 

    newPolyClass.addVectors(a, b, result); 


    return 0; 
} 
+0

Es gibt hier mehrere Probleme. Warum musst du eine Klasse deklarieren? Willst du stattdessen eine Vorlagenfunktion deklarieren? Die 'a',' b', 'result' Mitglieder der Klasse dienen keinem Zweck (da Sie die Vektoren übergeben, sind Argumente zu' addVectors'). Die Art, wie Sie über die Vektoren innerhalb von 'addVectors 'iterieren, ist nicht ganz richtig. Sie sollten über Iteratoren und Iterationen über Container lesen. Insbesondere möchten Sie den Schleifenindex "i" vom Typ "Vektor :: Iterator" statt "Vektor " deklarieren. – dhrumeel

+0

[this] (https://ideone.com/7cCoGR) ist wahrscheinlich. mehr was du willst. – Thomas

Antwort

0

Sie waren immer nicht angemeldeten Variablen, weil Sie newPolyClass.a, newPolyClass.b, newPolyClass.result anstelle von a, b und resullt verwenden müssen. Hier ist der korrigierte Code.

#include <vector> 
#include<iostream> 
#include<iomanip> 
#include<algorithm> 
using namespace std; 

template<class T> 
class polyClass { 
public: 
    //position 0 always constant, pos1 x^1, pos2 x^2 
    vector<T> a; 
    vector<T> b; 
    vector<T> result; 

    vector<T> addVectors(vector<T> & a, vector<T> & b, vector <T> & result) { 

     for (auto i = a.begin(), j = b.begin(); i != a.end() && j != b.end(); i++, j++) { 

      result.push_back (*i + *j); 

     } 
     return result; 
    } 
}; 


int main() { 

    polyClass<int> newPolyClass; 
    newPolyClass.a = {3, 4, 2}; 
    newPolyClass.b = {3, 3, 1}; 
    newPolyClass.result = {}; 

    newPolyClass.addVectors(newPolyClass.a, newPolyClass.b, newPolyClass.result); 


    return 0; 
} 
+0

Vielen Dank das war ein großes Bein bis @Dhruv Sehgal –

Verwandte Themen