首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这段Blitz++代码不能编译?

为什么这段Blitz++代码不能编译?
EN

Stack Overflow用户
提问于 2009-03-30 15:29:49
回答 3查看 1.3K关注 0票数 0

我是个blitz++新手。到目前为止,一切都很好,但是我有点困惑,为什么下面代码中注释掉的行不能编译成

代码语言:javascript
复制
error: conversion from ‘blitz::_bz_tinyMatExpr<blitz::_bz_tinyMatrixMatrixProduct<double, double, 3, 3, 3, 3, 1, 3, 1> >’ to non-scalar type ‘const m33’ requested

我在使用Debian/Lenny (g++ 4.3.2,blitz0.9)。代码如下:

代码语言:javascript
复制
#include <blitz/blitz.h>
#include <blitz/array.h>
#include <blitz/matrix.h>
#include <blitz/matexpr.h>
#include <blitz/tinymat.h>
#include <blitz/tinymatexpr.h>
#include <blitz/tinyvec.h>
#include <blitz/tinyvec-et.h>
#include <blitz/vector.h>
#include <blitz/vector-et.h>

typedef blitz::TinyVector<double,3> v3;
typedef blitz::TinyMatrix<double,3,3> m33;

int main(int,char**)
{
  const m33 a;
  const m33 b;
  m33 c;c=blitz::product(a,b);  // Compiles OK
  //const m33 d=blitz::product(a,b);  // Fails to compile.
  return 0;
}

我确实喜欢被完全理解,所以我很想知道是否有一种方法可以让它工作(到目前为止,Blitz++的经验表明,这可能只是一个选择正确的问题,包括...)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-03-30 18:06:57

我已经看过Blitz++的源代码了。令人惊讶的是,没有用于TinyMatrix的模板构造函数,但有一个=运算符。这意味着你不能做你想做的事情。所以我建议忘记你的矩阵是const。或者找到另一种方法,比如创建一个非常量矩阵,将其作为常量引用作为函数的参数传递。

现在,只是为了好玩,事实是你可以复制模板operator=()代码并在blitz/tinymat.h中创建一个新的模板构造函数,但我不会!如果你真的想,下面是怎么做的:

代码语言:javascript
复制
// Turn the following code...

template<typename T_expr>
TinyMatrix<T_numtype, N_rows, N_columns>&
operator=(_bz_tinyMatExpr<T_expr> expr)
{
    // USEFUL CODE
    return *this;
}

// ...into this :
template<typename T_expr>
TinyMatrix(_bz_tinyMatExpr<T_expr> expr)
{
    // USEFUL CODE
}

这样你的代码就可以编译了(并且很可能还能工作)。

票数 2
EN

Stack Overflow用户

发布于 2009-06-07 17:15:37

代码语言:javascript
复制
//const m33 d=blitz::product(a,b);  // Fails to compile.
const m33 d;
const_cast<m33>(d) = blitz::product(a,b);
票数 1
EN

Stack Overflow用户

发布于 2009-03-30 15:53:49

对不起,不知道闪电战,但一些想法可能会有所帮助。

闪电战::TinyMatrix是否有合适的构造函数?

也许可以尝试其他形式的复制构造函数

代码语言:javascript
复制
const m33 d( blitz::product(a,b) );

应用标准const关键字真的合适吗?也许你可能需要

代码语言:javascript
复制
typedef blitz::TinyMatrix<const double,3,3> const_m33;
typedef blitz::ConstTinyMatrix<double,3,3> const_m33;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/697711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档