【发布时间】:2015-11-09 16:38:57
【问题描述】:
我有一个函数:
void computeC(array3D fp, double& C) {
C = 0.0;
for (int x = 0; x < M; ++x) {
for (int y = 0; y < N; ++y) {
for (int i = 0; i < 5; ++i) {
C += fp[x][y][i];
}
}
}
}
这里的变量 fp 和 C 定义为:
typedef std::vector<double> array1D;
typedef std::vector<array1D> array2D;
typedef std::vector<array2D> array3D;
array2D C(M, array1D(N, 0));
array3D fp(M, array2D(N, array1D(5, 0.0)));
函数被称为:
computeC(fp, C);
当我执行主代码时,出现以下错误:
vect.cpp:9:22: error: invalid initialization of reference of type 'double&'
from expression of type 'array2D {aka std::vector<std::vector<double> >}'
和
vect.hpp:130:6: error: in passing argument 2 of 'void computeRho(array3D, double&)'
我该如何解决这个问题?
【问题讨论】:
-
令人惊讶的是,
double&与array2D的类型不同。 -
您是否阅读了错误信息?它准确地说明了问题所在。
-
void computeC(array3D fp, double& C)即使你得到第二个参数,你也应该通过引用而不是值来传递第一个参数。 -
PaulMckenzie..尝试你的建议仍然是同样的错误。
-
我的建议与不必要的 3d 矢量复制有关。如果您通过引用传递它,则副本不会完成。