C++ Don';无法理解此错误:初始化';的参数1;类别';[带T=unsigned int]';[-fpermissive]

C++ Don';无法理解此错误:初始化';的参数1;类别';[带T=unsigned int]';[-fpermissive],c++,C++,这是我在Eclipse中构建时出现的3个错误中的第一个 在main函数中,我只是实例化类多维_向量,它是一个模板 奇怪的是,当我将第14行push_back()中的参数w改为*w时,错误就消失了。但是我刚刚读到,向后推指针是不合适的,所以我想知道用*w作为push_back()的参数是否合适 守则: #include <vector> #include <stdlib.h> using std::vector; enum Foo { length = 4, heigth

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

在main函数中,我只是实例化类多维_向量,它是一个模板

奇怪的是,当我将第14行push_back()中的参数w改为*w时,错误就消失了。但是我刚刚读到,向后推指针是不合适的,所以我想知道用*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;
}
#包括
#包括
使用std::vector;
枚举Foo{length=4,heigth=4};
模板
类多维向量
{
私有:向量<多维向量>wector;
公众:
多维_向量(){}
多维_向量(ta){
对于(int-var=0;var-value=value;
}
};
int main(){
多维_向量*nimarray=新的多维_向量(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) {
t.C:12:34:错误:“heigth”未在此范围内声明

对于(int var=0;var)确切的错误消息是什么,它指向哪一行?您不调用一个不存在的复制构造函数吗?与编译器错误无关,但是
wector.push_back(*w)
泄漏内存。您创建一个对象,然后将其复制到向量中,并且从不删除它。要解决这个问题,首先不要使用
new
wector.emplace\u back(a);
会更简单。@M.M您的意思是它应该是wector.emplace\u back(新多维向量(a));?您能告诉我您是如何在注释部分中处理代码段后面的灰色背景吗?不,停止使用
new
。使用反勾来突出显示代码。“给定的代码绝对没有问题。”-在我看来,代码中有很多问题,不会给出编译错误,但答案仅限于问题的域,这只是编译错误。是的,我删除了枚举,因为在这里发布时,我忘了我仍在使用高度。此外,我还将*w改回了w,所以现在应该是不是该版本正在工作,抱歉。@M.M您好,谢谢您的回答,您能再次检查更新后的代码吗?我想知道是否只有回推是个问题。您还暗示有很多问题,也许我们可以私下谈谈,我很好奇,也很想了解。:)您的“wector”容器包含“多维向量”对象,但您正试图向后推()指向该类的指针。这是您的错误,如果您慢慢阅读,我确信这正是编译器错误消息告诉您的。当您有一个“std::vector”时,您只能向后推()“X”对象到向量中,而不是“X*”。不需要为堆上的对象分配指针,只需在push_back()之前声明“多维_向量w(a);”。