C ++函数调用2d数组

时间:2015-05-05 14:08:07

标签: c++ arrays

嘿伙计们,我在类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)’

我能做些什么才能解决这个问题?谢谢

2 个答案:

答案 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(没有在类型推导下执行转换)或者它不是正方形,那么你的程序甚至不会编译