Klasse einbinden - !
-
Hallo zusammen,
ich habe eine Header-datei (Reader.h) die ich in mein Projekt eingebunden habe:
#include <zxing/Reader.h>
Der Inhalt der Reader.h ist:
#ifndef __READER_H__ #define __READER_H__ /* * Reader.h * zxing * * Copyright 2010 ZXing authors All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include <zxing/BinaryBitmap.h> #include <zxing/Result.h> #include <zxing/DecodeHints.h> namespace zxing { class Reader : public Counted { protected: Reader() {} public: virtual Ref<Result> decode(Ref<BinaryBitmap> image); virtual Ref<Result> decode(Ref<BinaryBitmap> image, DecodeHints hints) = 0; virtual ~Reader(); }; } #endif // __READER_H__
Jetzt möchte ich eine Instanz auf die Reader-Klasse erzeugen. Das versuche ich mit:
Reader myReader = new Reader();
ich erhalte nun diesen Fehler:
unknown type name 'Reader'
Was mache ich falsch????
Gruß
Torsten
-
Die Klasse ist ein einem Namespace definiert. Es wäre also zxing::Reader. Das wird aber nicht funktioniern, denn die Klasse ist abstrakt (
virtual Ref<Result> decode(Ref<BinaryBitmap> image, DecodeHints hints) = 0;
muss in einer abgeleiteten Klasse definiert werden).Wo auch immer der Header herkommt: die Verwendung sollte dokumentiert sein.
-
@torsten_156 sagte in Klasse einbinden - !:
Reader myReader = new Reader();
Der Unterschied zwieschen
Reader
undReader*
ist dir klar?
-
@manni66 sagte in Klasse einbinden - !:
@torsten_156 sagte in Klasse einbinden - !:
Reader myReader = new Reader();
Der Unterschied zwieschen
Reader
undReader*
ist dir klar?Die Variante
Reader*
ist ein Zeiger auf Reader...?
-
@torsten_156 und was liefer
new
zurück?
-
@torsten_156: Du meinst die ZXing C++ Library ?
So wie ich den Source verstehe, sind u.a. in den Unterordnern oned und multi konkreteReader
implementiert.
-
@Schlangenmensch sagte in Klasse einbinden - !:
@torsten_156 und was liefer
new
zurück?eine neue Instanz auf das Objekt Reader...
-
@torsten_156 sagte in Klasse einbinden - !:
Was mache ich falsch????
namespace zxing
EDIT: Ups, super redundant, hab die Antworten nicht gesehen
-
@torsten_156 sagte in Klasse einbinden - !:
@Schlangenmensch sagte in Klasse einbinden - !:
@torsten_156 und was liefer
new
zurück?eine neue Instanz auf das Objekt Reader...
Nein
-
@Th69 Ja diese meine ich. Der
MultiBarcodeReader
hört sich ja gut an. Aber wie binde ich diesen in mein Projekt ein???Gruß
Torsten
-
Dieser Beitrag wurde gelöscht!
-
@manni66 Ich greife damit auf den Speicherplatz von
Reader
zu
-
@Schlangenmensch sagte in Klasse einbinden - !:
@torsten_156 und was liefer
new
zurück?@torsten_156 sagte in Klasse einbinden - !:
@manni66 Ich greife damit auf den Speicherplatz von
Reader
zuIst das eine Antwort auf die Frage?
-
@manni66 Ups, bin bereits ein wenig verwirrt. So viele unterschiedliche Fragen...
-
@torsten_156 sagte in Klasse einbinden - !:
@Schlangenmensch sagte in Klasse einbinden - !:
@torsten_156 und was liefer
new
zurück?eine neue Instanz auf das Objekt Reader...
Es erstellt eine neue Instanz, aber was liefert es zurück? Hinweis: Es könnte mit einer vorherigen Frage zusammenhängen bezüglich dem Unterschied zwischen
Reader
undReader*
-
@Dravere Es liefert einen Zeiger auf den Datentyp
Reader
zurück. Dabei wird auch der benötigten Speicher reserviert. Dieser muss nach Beendigung dann mit delete wieder freigegeben werden. Soweit richtig?Gruß
Torsten
-
@torsten_156 sagte in Klasse einbinden - !:
@Dravere Es liefert einen Zeiger auf den Datentyp
Reader
zurück. Dabei wird auch der benötigten Speicher reserviert. Dieser muss nach Beendigung dann mit delete wieder freigegeben werden. Soweit richtig?Soweit richtig. Nun denk noch einmal scharf nach, wieso manni66 wohl folgendes sagte:
@manni66 sagte in Klasse einbinden - !:
@torsten_156 sagte in Klasse einbinden - !:
Reader myReader = new Reader();
Der Unterschied zwieschen
Reader
undReader*
ist dir klar?Da hat er bestimmt einen Grund für gehabt.
Über den von manni66 angesprochenen syntaktischen Fehler hinaus, sollte man noch unbedingt erwähnen, dass man in C++ ohnehin niemals
new
im Anwendungscode benutzt. Das würde ich fast schon als krassen Fehler bezeichnen. Zu viel Java gemacht?
-
@torsten_156 sagte in Klasse einbinden - !:
@Th69 Ja diese meine ich. Der
MultiBarcodeReader
hört sich ja gut an. Aber wie binde ich diesen in mein Projekt ein???Du bist wahrscheinlich durch die VCL daran gewöhnt, Objektinstanzen per
new
anzulegen, aber der Standard ist die direkte Erstellung eines Objekts (auf dem Stack):MultipleBarcodeReader multipleBarcodeReader;
s.a. cli/src/main.cpp (auch wenn hier ein
GenericMultipleBarcodeReader
angelegt wird)
-
@SeppJ
Nö, vermutlich zuviel Embarcadero VCL Scheiß gemacht. Deren Framework erfordert, dass alles, was vonTObject
erbt, auf dem Heap angelegt werden muss. Ausnahmslos. Um das weiter zu erschweren funktionieren auchmake_shared
undmake_unique
nicht mit dem VCL Framework zusammen, da bleibt nur noch die Konstruktion übernew
.
-
@DocShoe sagte in Klasse einbinden - !:
@SeppJ
Nö, vermutlich zuviel Embarcadero VCL Scheiß gemacht. Deren Framework erfordert, dass alles, was vonTObject
erbt, auf dem Heap angelegt werden muss. Ausnahmslos. Um das weiter zu erschweren funktionieren auchmake_shared
undmake_unique
nicht mit dem VCL Framework zusammen, da bleibt nur noch die Konstruktion übernew
.Leute wissen davon und benutzen das trotzdem?