无法转换 'const ScalarMultipleReturnType 错误
Posted
技术标签:
【中文标题】无法转换 \'const ScalarMultipleReturnType 错误【英文标题】:cannot convert 'const ScalarMultipleReturnType Error无法转换 'const ScalarMultipleReturnType 错误 【发布时间】:2015-07-29 11:55:49 【问题描述】:运行我的代码会出现以下编译错误:
无法在初始化中将 'const ScalarMultipleReturnType aka const Eigen::CwiseUnaryOp, const Eigen::Matrix >' 转换为 'double' double tempSum = deltaT*(vectorB(i)-vectorB2(i))*k[i];
在以下行:
double tempSum = deltaT*(vectorB(i)-vectorB2(i))*k[i];
truncError = truncError + tempSum;
我已将变量vectorB 和vectorB2 定义为:Eigen::VectorXd vectorB;
并分别为这两个向量初始化为vectorB = Eigen::VectorXd::Zero(size);
。
k定义为:std::vector<Eigen::MatrixXd> k(size);
deltaT 的类型为double
每个尽管 k 是矩阵的向量,但每个矩阵只有一个值。例如:k[0] 是单个双精度值。
有人可以帮我在这里进行类型转换吗?我认为这就是造成问题的原因。我希望将表达式 double tempSum = deltaT*(vectorB(i)-vectorB2(i))*k[i]
的 RHS 转换为双变量。
【问题讨论】:
我不熟悉 Eigen - 但是你正在做一个向量乘以一个矩阵,所以结果将是另一个向量,所以将向量转换为双精度是没有意义的.您能否提供一些示例输入和输出来显示您要计算的内容? @MattMcNabb 不,我将向量中的单个元素(即(vectorB(i)-vectorB2(i))
)乘以单个元素矩阵,所以根据我的说法,返回类型应该是double
。就像我提到的,k[i]
是一个单元素矩阵。
通常,两个向量相减得到另一个向量。为什么你期望它给出一个元素?另外:单元素矩阵与标量不同,您的最后一条评论表明您将这两者视为可互换的。 (IDK 是否 Eigen 具有从单元素矩阵进行的隐式转换,但如果是,则必须仅在编译时已知矩阵大小时才有效)
要获得好的答案,您需要发布MCVE。你应该可以把它减少到 10 行左右,因为这是一个编译器错误。
vectorB(i) 是数据类型 Eigen::VectorXd 的 vectorB 的单个元素。对于向量B2(i) 也是如此。这基本上在一个循环中运行,它使用变量 i 访问 vectorB 和 vectorB2 的各个元素。
【参考方案1】:
所以我尝试创建一个临时矩阵,即Eigen::MatrixXd temp = k[i];
,因为我知道 k[i] 是一个单元素矩阵,所以我在表达式中使用它作为double tempSum = deltaT*(vectorB(i)-vectorB2(i))*temp(0,0);
,它工作正常。不过,这是一个非常粗略的解决方案,也是一个非常专业的解决方案。
【讨论】:
以上是关于无法转换 'const ScalarMultipleReturnType 错误的主要内容,如果未能解决你的问题,请参考以下文章
c++中出现 无法从“CString”转换为“const std::string”错误
SSE:从 const __m128 * 转换为 const float *
无法从 'const std::string [3]' 转换为 'std::string'