无法转换 '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 错误的主要内容,如果未能解决你的问题,请参考以下文章

无法从“const char *”转换为“LPCTSTR”

c++中出现 无法从“CString”转换为“const std::string”错误

SSE:从 const __m128 * 转换为 const float *

无法从 'const std::string [3]' 转换为 'std::string'

error C2440: “=”: 无法从“const wchar_t [4]”转换为“LPWSTR”

error C2440: “=”: 无法从“const char [18]”转换为“LPCWSTR”