2017-02-04 4 views
2

Этот вопрос может быть выброшен, но я искал и искал помощь по этому вопросу. Я полный новичок. ОК: у меня есть класс шаблонов с функцией, которая добавляет два вектора и выходы к третьему вектору. Мне нужно позвонить, если из моей основной программы. Вот мой шаблон (очень простой).C++ шаблон: не могу вызвать мою функцию из main.cpp

#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; 

     } 
    } 
}; 

Мне нужно вызвать функцию addVectors из моей основной программы. И я продолжаю получать сообщение о том, что я не объявлял «a», «b» и «результат» в этой области. Я прохожу через 3 часа с этим и могу действительно использовать некоторую помощь. Вот моя основная программа.

#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

Есть несколько вопросов здесь. Зачем вам нужно объявлять класс? Вы хотите сказать вместо этого шаблонную функцию? Члены класса 'a',' b', 'result' не служат никакой цели (поскольку вы передаете векторы, являются аргументами' addVectors'). То, как вы выполняете итерации по векторам внутри 'addVectors', не совсем корректно. Вы должны прочитать об итераторах и итерации по контейнерам. В частности, вы хотите объявить индекс цикла 'i' типа' vector :: iterator', а не 'vector '. – dhrumeel

+0

[это] (https://ideone.com/7cCoGR) является проблемой. больше, чего вы хотите. – Thomas

ответ

0

Вы получали необъявленные переменные, потому что вы должны использовать newPolyClass.a, newPolyClass.b, newPolyClass.result вместо а, б и resullt. Вот исправленный код.

#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

Спасибо, что это была огромная нога @Dhruv Sehgal –