嘿伙计们,我在类County.h中有构造函数:
struct Country {
Country(double**, int);
};
在主要内容中我有graph[Size][Size]
,我想调用County
的构造函数。
int main() {
double graph[Size][Size];
Country c(graph, 0);
}
但是它给了我错误no matching function for call to ‘County::County(double [22][22], int)’
我能做些什么才能解决这个问题?谢谢
答案 0 :(得分:4)
double [Size][Size]
和double**
根本不是同一类型。这就是你的编译器不喜欢的。
更改构造函数原型或声明数组的方式。但是你不能直接将数组数组转换为指针指针。
struct Country {
Country(double[Size][Size], int);
};
OR:
int main() {
double** graph = new (double*)[Size];
for (int i = 0; i < Size; ++i) {
graph[i] = new double[Size];
}
Country c(graph, 0);
// Don't forget to delete your graph then.
}
请注意,第一个要求您在代码开始执行之前知道大小(例如,将Size
存储在宏中),但第二个需要更长时间来编码,并且您将不得不操纵更多RAM内存,如果你不小心可能会导致错误。
答案 1 :(得分:1)
另一种方法是将构造函数声明为模板并通过(const
)引用传递数组,
struct Country {
template<size_t N>
Country(double /*const*/ (&arr)[N][N], int);
};
这样,模板将直接推断出数组的大小。当然,缺点是上面的双指针不会起作用。好处是编译器会强烈检查类型,如果数组不是double
s(没有在类型推导下执行转换)或者它不是正方形,那么你的程序甚至不会编译