質問

私は電撃++初心者です。これまでのところ、とても良いが、以下のコードでコメントアウト行は

でコンパイルに失敗した理由を私は少し当惑よ
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 /レニー(G ++ 4.3.2、ブリッツ0.9)によ。 ここでは、コードがあります:

#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;
}
それが動作するように取得する方法があるかどうかを知ることは素晴らしいことだので、

私はこれまでのところ、それはちょうど含んを選ぶの問題であるかもしれない示唆している(、柄へのconst-EDになるようにブリッツ++の経験が好きですか...)。

役に立ちましたか?

解決

私はブリッツ++のソースコードを見てきました。 それが見えるかもしれませんと同じくらい驚くべき、TinyMatrixのためのなしのテンプレートコンストラクタはありませんが、テンプレート=演算子があります。 それはあなたが何をしようとすることができないことを意味します。だから私はあなたの行列であることのconstのの忘れをお勧めしたいです。それとも、関数のパラメータとしてconst参照として渡す非const行列を作成するなどの別の方法を見つけます。

さて、楽しみのためだけに、真実はあなたがテンプレート演算子=()のコードをコピーして、それから電撃/ tinymat.h内に新しいテンプレートコンストラクタを作ることですが、私はないでしょう!あなたがが本当にのここだ、する方法:

// 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
}

とあなたのコードがコンパイル(そしておそらく動作します)。

他のヒント

//const m33 d=blitz::product(a,b);  // Fails to compile.
const m33 d;
const_cast<m33>(d) = blitz::product(a,b);

申し訳ありません電撃を知っているが、役立つかもしれないいくつかのアイデアはありません。

電撃:: TinyMatrixは、適切なコンストラクタを持っていますか?
おそらく、コピーコンストラクタの他の形をしてみてください。

const m33 d( blitz::product(a,b) );

本当に適切な標準のconstキーワードを適用していますか?おそらく、あなたが必要な場合があります。

typedef blitz::TinyMatrix<const double,3,3> const_m33;
typedef blitz::ConstTinyMatrix<double,3,3> const_m33;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top