【问题标题】: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 的各个元素。

标签: c++ c++11 eigen


【解决方案1】:

所以我尝试创建一个临时矩阵,即Eigen::MatrixXd temp = k[i];,因为我知道 k[i] 是一个单元素矩阵,所以我在表达式中使用它作为double tempSum = deltaT*(vectorB(i)-vectorB2(i))*temp(0,0);,它工作正常。不过,这是一个非常粗略的解决方案,也是一个非常专业的解决方案。

【讨论】:

    猜你喜欢
    • 2020-01-23
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 2016-11-20
    • 2013-12-17
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    相关资源
    最近更新 更多