[ERLEDIGT] SQLite3 Problem: Fehler in Definition
-
Versteh ich zwar net warum ich das tun sollte, da ist bei Builder 5 auch so funktioniert hatte, aber ok. Jetzt bekomme ich folgende Fehler:
[ILINK32 Fehler] Error: Nicht aufl÷sbares externes '_sqlite3_close' referenziert von E:\C++ PROJEKTE\SCHWEI¯PARAMETER-DB\DEBUG\DATENSTRG.OBJ
[ILINK32 Fehler] Error: Nicht aufl÷sbares externes '_sqlite3_open' referenziert von E:\C++ PROJEKTE\SCHWEI¯PARAMETER-DB\DEBUG\DATENSTRG.OBJ
[ILINK32 Fehler] Error: Nicht aufl÷sbares externes '_sqlite3_errmsg' referenziert von E:\C++ PROJEKTE\SCHWEI¯PARAMETER-DB\DEBUG\DATENSTRG.OBJ
-
das Problem ist, dass er im Header "sqlite3" nicht (er)kennt, also mußt du es dort irgendwie bekannt machen
zu den Fehlermeldungen hilft vielleicht dieser Beitrag
-
Linnea schrieb:
das Problem ist, dass er im Header "sqlite3" nicht (er)kennt, also mußt du es dort irgendwie bekannt machen
Genau das ist das Problem. sqlite3 ist bekannt, das sehe ich wenn ich drüber fahre dann zeigt er mir ja die dazugehörige Headerdatei an und das ist sqlite3.h. Funktioniert also, nur warum erkennt er die Definition der Parameterübergabe nicht? Hat vllt. noch jmd. ne Idee?

-
Ich kann es leider momentan nicht unter BCB2007 testen da ich nicht am richtigen Rechner bin, aber ist es möglich, dass ich die sqlite3.h auch schon im meinem MainForm bekannt machen muss über das ich die datenStrg.cpp aufrufe? Hab das gerade mal beim BCB5 getestet (in nem alten Projekt) und dort bekomme ich sobald ich die include Anweisung auskommentiere exakt den selben Fehler.
Warum jedoch braucht der Compiler schon im aufrufenden Formular die include Anweisung?
-
Du musst das include da reinpacken, wo du deren Deklarationen benötigst (in datenStrg.cpp). In der datenStrg.h würde auch eine Forwarddeklaration auf sqlite3 reichen (class oder struct), da du hier nur mit Pointern hantierst. Die unresolved externals deuten darauf hin, das du auch die dazugehörige sqlite-Lib nicht mit eingebunden hast.
-
Ja aber genau das versteh ich ja nicht. Die include Anweisung hab ich im Kopf der cpp Datei angegeben, die lib ins Projekt eingefügt und wie gesagt in nem älteren Projekt lief das unter BCB5 auch prima so.
-
Das kann ich jetzt ohne mehr Informationen nicht überprüfen. Wenn du willst, kannst du mir ja mal dein Projekt schicken.
-
merlot schrieb:
[...] die lib ins Projekt eingefügt [...]
Hast du das bzw. die sqlite-Verzeichnis(se) mit in die Source- und Bibliothekspfade in den Projektoptionen eingetragen!?
-
Ich hab die lib dem Projekt hinzugefügt, über Projekt-->Dem Projekt hinzufügen...
Jetzt hab ich noch die lib in das lib Verzeichnis des BCB kopiert. Das hilft aber alles nichts.Das ist echt deprimierend, wenn man keinen Fehler findet und vorallem neue Software hat und diese nur unzureichend nutzen kann.
-
Nachdem ich die sqlite3 als Vorwärtsdeklaration eingefügt habe funktioniert es. Ich verstehe zwar nicht warum die lib und die Header nicht genügen, aber ok, solange es geht.
merlot schrieb:
datenStrg.h
class sqlite3; //Vorwärtsdeklaration eingefügt class datenStrg { public: __fastcall datenStrg(TfrmOFmain *pMain); __fastcall ~datenStrg(); void __fastcall fehlerDB(sqlite3 *database); ... private: sqlite3 *database; ... };datenStrg.cpp
#include <string> #include <sqlite/sqlite3.h> using namespace std; #pragma hdrstop #include "datenStrg.h" #include "OFmain.h" #include "Info.h" #include "Hilfe.h" #include "Parameter.h" #pragma package(smart_init) __fastcall datenStrg::datenStrg(TfrmOFmain *pMain) { if (sqlite3_open("daten.db", &database) != SQLITE_OK) //Datenbank öffnen { fehlerDB( database ); } } //--------------------------------------------------------------------------- __fastcall datenStrg::~datenStrg() { sqlite3_close( database ); //Datenbank schließen } //--------------------------------------------------------------------------- void __fastcall datenStrg::fehlerDB(sqlite3 *database) { /*Fehlercode ausgeben */ ... = sqlite3_errmsg( database ); } ...Trotzdem danke an alle die helfen wollten und falls noch jmd. ne bessere Lösung hat dann her damit.
