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