2016-05-18 16 views
2

HintergrundWie gibt man Werte eines benutzerdefinierten Typs mit NSLog aus?

ich VES bin mit dem Kiwi-Punktwolke Betrachter auf iOS-Geräten zu nutzen.

Fehler

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

Ergebnisse in

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

Frage

Ich verstehe, dass NSLog zur Ausgabe ein Objekt vom Typ erwartet wird id. Wie bekomme ich NSLog zum Ausgabetyp vesVector3f?

Extradetails

Hier sind einige Details, die ich über den benutzerdefinierten Typ gefunden. Es scheint Vector3f ist ein Vektor von 3 Schwimmern.

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

Lösung

Per trojanfoe ‚s Kommentar:

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

Antwort

3

Das sieht aus wie Objective-C++ gegeben Eigen ist eine C-Bibliothek ++.

Sie werden jeweils von den Schwimmerelementvariablen, so etwas drucken mögen:

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

ich sage „so etwas wie diese“, wie ich habe noch nie verwendet Eigen.

Sie können nur %@ mit einer Objective-C-Klasse verwenden, in der Sie die description-Methode überschreiben würden, damit sie nach Ihren Wünschen funktioniert.

+0

Ich wusste nicht, "Objective-C++" war ein Begriff, aber ja, es ist definitiv so. Dies gab mir zunächst eine "SIGABRT", aber nachdem ich die Parameter in 'v (n, m) umgedreht hatte, konnte ich die Werte erhalten, nach denen ich suchte. – Jacksonkr

+1

@Jacksonkr Prost; Argumente in meiner Antwort für zukünftige Besucher. – trojanfoe

2

Wie bekomme ich NSLog auf den Ausgabetyp vesVector3f?

Es müsste ein Objekt sein, wie die Fehlermeldung Ihnen sagt. Wenn es sich um eine Struktur handelt, kann sie nicht direkt über NSLog ausgegeben werden. Sie könnten die drei Schwimmer einzeln einzeln ausgeben. Aber wenn Sie das viel tun, können Sie zum Beispiel eine Routine schreiben, die die drei Floats in eine Zeichenkette umwandelt und diese Zeichenkette ausgibt. Das ist, was eingebaute Routinen wie NSStringFromCGVector tun.