不明白这个错误:初始化'class'的参数1 [with T = unsigned int]'[-fpermissive]

时间:2016-01-28 01:20:57

标签: c++

这是我在Eclipse中构建时出现的3个错误中的第一个。

在main函数中,我只是实例化类multidimensional_vector< 1,unsigned int>这是一个模板。

奇怪的是,当我将第14行的push_back()中的参数w更改为* w时,错误正在消失。但我刚刚读到push_back指针并不好,所以我想知道是否可以使用* w作为push_back()的参数呢?

代码:

#include <vector>
#include <stdlib.h>
using std::vector;

enum Foo { length = 4, heigth = 4};

template<unsigned int dimcount, typename T>
class multidimensional_vector
{
    private: vector< multidimensional_vector<dimcount-1, T> > wector;
    public:
    multidimensional_vector() {}
    multidimensional_vector(T a) {
        for (int var = 0; var <= heigth; ++var) {
            multidimensional_vector<dimcount-1,  T> *w = new multidimensional_vector<dimcount-1,  T>(a);
            wector.push_back(w);
        }
    }

    T getValue(vector<unsigned int> v){
        return wector[v[dimcount]].getValue(v);
    }

    void setValue(vector<unsigned int> v, T value){
        wector[v[dimcount]].setValue(v, value);
    }
};

template<typename T>
class multidimensional_vector<0,T>
{
    private: T value;
    public:
    multidimensional_vector() {}
    multidimensional_vector(T a) {
        value = a;
    }

    T getValue(vector<unsigned int> v){
        return value;
    }

    void setValue(vector<unsigned int> v, T value){
        this->value = value;
    }
};



int main() {
    multidimensional_vector<1,  unsigned int> *nimarray = new multidimensional_vector<1,  unsigned int>(0);

    return 0;
}

1 个答案:

答案 0 :(得分:0)

当尝试从问题中编译代码片段时,gcc 5.3.1报告的唯一错误是:

t.C:12:34: error: ‘heigth’ was not declared in this scope
         for (int var = 0; var <= heigth; ++var) {

gcc不报告您询问的那种错误。

手动将此变量的声明添加到类后,给定的代码编译没有任何问题。

除了缺少类成员声明外,给定代码绝对没有错。