2016-05-18 7 views
2

背景NSLogを使用してカスタムタイプの値を出力する方法は?

私は、iOSデバイス上のキウイ点群ビューアを活用するVESを使用しています。

Cannot pass non-POD object of type `vesVector3f` (aka 'Matrix<float, 3, 1>') to variadic function; expected type from format string was 'id' 

エラー

vesVector3f v = self->mKiwiApp->cameraFocalPoint(); 
NSLog(@"%@", v); 

結果質問

私はNSLogが出力に型のオブジェクトを期待されていることを理解しidNSLogを出力タイプvesVector3fにするにはどうすればよいですか?

エキストラ詳細

は、ここで私はカスタムタイプについて見つかったいくつかの詳細です。 Vector3fは3フロートのベクトルです。

  • typedef Eigen::Vector3f vesVector3f;
  • EIGEN_MAKE_TYPEDEFS_ALL_SIZES(float, f)

ソリューション

パーtrojanfoeのコメント:

NSLog(@"%f, %f, %f", v(0, 0), v(1, 0), v(2, 0)); 

答えて

3

これは、Objective-Cのように見える++ Eigen与えられたC++ライブラリです。

あなたはフロートメンバ変数のそれぞれにこのような何か印刷したいと思う:私は固有値を使ったことがないよう、「このようなものを」と言う

NSLog(@"%f, %f, %f", v(0, 0), v(1, 0), v(2, 0)); 

を。

descriptionメソッドをオーバーライドするObjective-Cクラスには、%@メソッドしか使用できません。

+0

「Objective-C++」は用語ではありませんでしたが、確かにそうです。これは当初私に 'SIGABRT'を与えましたが、' v(n、m) 'の中のパラメータを反転させた後、私が探していた値を得ることができました。 – Jacksonkr

+1

@Jacksonkr乾杯;将来の訪問者のために私の答えで議論を裏返した。 – trojanfoe

2

NSLogに出力タイプvesVector3fを取得するにはどうすればよいですか?

エラーメッセージが示すとおり、オブジェクトである必要があります。それが構造体の場合、NSLog経由で直接出力することはできません。 3つのフロートを自分で個別に出力することができます。しかし、これをたくさんするつもりなら、たとえば、3つの浮動小数点数を文字列に変換してその文字列を出力するルーチンを書くことができます。それはNSStringFromCGVectorのようなビルトインルーチンです。

関連する問題