Probleme bei der Implementierung von QRCodeReader (ZXing)
-
27-10-2019 - |
Frage
Ich habe also die hier genannten Schritte ausgeführt: http://zxing.googlecode.com / svn / trunk / iphone / README
Und ich habe sichergestellt, dass alles in Ordnung ist, aber mein QRCodeReader wird in der Datei myVC.mm nicht erkannt.
So ist die Situation:
Das Projekt wird wie im Link beschrieben in mein eigenes Projekt eingefügt.
Ich habe den #import "ZXingWidgetController.h"
in die Header-Datei importiert und er wird erkannt.
Ich habe den #import "QRCodeReader.h"
in die Implementierungsdatei (.mm) importiert.
Dann habe ich beide in einer Zielmethode mit einer Schaltfläche wie dieser zugewiesen:
ZXingWidgetController *widController = [[ZXingWidgetController alloc] initWithDelegate:self showCancel:YES OneDMode:NO];
widController.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"qr_code_initialising_bg.png"]];
QRCodeReader* qrcodeReader = [[QRCodeReader alloc] init];
NSSet *readers = [[NSSet alloc ] initWithObjects:qrcodeReader,nil];
[qrcodeReader release];
widController.readers = readers;
[readers release];
[self presentModalViewController:widController animated:YES];
Jetzt sagt es mir, dass dies das Problem ist:
QRCodeReader* qrcodeReader = [[QRCodeReader alloc] init];
NSSet *readers = [[NSSet alloc ] initWithObjects:qrcodeReader,nil];
[qrcodeReader release];
Es heißt: Use of undeclared identifier 'QRCodeReader'
- Warum wird mein Import des QRCodeReader nicht in der scheinbaren .mm angezeigt Datei?
- Was habe ich vergessen, das nicht in der von mir verwendeten Beschreibung enthalten ist?
- Und vor allem, wie kann ich das beheben, um den QRCodeReader zu erkennen?
Lösung
Der reine C ++ - Code (nicht Objective C ++) verwendet C ++ - Namespaces.
Sie müssen entweder zxing::qrcode::QRCodeReader
sagen oder using
-Anweisungen wie verwenden
using namespace zxing;
using namespace zxing::qrcode;
Update :
Der obige Code bringt zwar die C ++ - Klasse ein, aber es gibt tatsächlich eine gleichnamige Widget-Klasse, die ich vergessen habe.Es ist eine Objective C-Klasse, die die C ++ - Klasse umschließt und genau das ist, was Sie wollen.Anstelle des obigen Codes nur #import "QRCodeReader.h"
... was Sie gesagt haben.Ich gehe davon aus, dass die beiden gleichnamigen Dateien kollidieren.Haben Sie beim Einschließen der CPP-Dateien die Option "rekursiv" festgelegt?Die README-Datei sagt "muss nicht", sollte aber wahrscheinlich "muss nicht" sagen.Dies könnte dazu führen, dass die CPP-Datei und nicht die Widget-Version enthalten ist.
Andere Tipps
Ich hatte genau das gleiche Problem am Ende, die Lösung war ziemlich einfach.
Ich habe die .mm-Datei mit "Location" -> "Relative to Project" abgelegt.
Hoffe diese Hilfe