【问题标题】:C++ template: cannot call my function from main.cppC++ 模板:无法从 main.cpp 调用我的函数
【发布时间】:2017-02-04 21:45:07
【问题描述】:

这个问题可能会被抛出,但我一直在寻找和寻求帮助。我是一个完全的初学者.. 好的:我有一个模板类,它带有一个添加两个向量并输出到第三个向量的函数。我需要从我的主程序调用 if 。这是我的模板(非常简单)。

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

【问题讨论】:

  • 这里有几个问题。为什么需要声明一个类?你的意思是声明一个模板函数吗?类的abresult 成员没有任何用途(因为您传递的向量是addVectors 的参数)。您在 addVectors 内部的向量迭代的方式不太正确。您应该阅读有关迭代器和容器迭代的信息。具体来说,您希望将循环索引i 声明为vector&lt;T&gt;::iterator 类型,而不是vector&lt;T&gt;
  • this 很可能。更多你想要的。

标签: c++ function templates vector


【解决方案1】:

您获得了未声明的变量,因为您需要使用 newPolyClass.a、newPolyClass.b、newPolyClass.result 而不是 a、b 和 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;
}

【讨论】:

  • 谢谢@Dhruv Sehgal 的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-14
  • 2017-06-26
  • 1970-01-01
  • 2015-09-22
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多