[c++] kleines Programm

01/09/2014 21:01 callinq#1
Hallo liebe E-Pvp- Community,
da ich mir ein wenig c++ aneignen wollte, habe ich mir vorgenommen mit einem kleinen Programm eine Datenbank auszulesen. Nun taucht aber bei mir ein Fehler auf, den ich nicht selbst lösen kann und weis auch nicht wie.
Ich bin gerade dabei erst einmal eine Verbindung zur Datenbank aufzubauen.


Zum Programm (mit VS2013 geschreiben):
- Konsolenanwendung
- mysql.h wurde schon im Includeverzeichniss hinzugefügt
- Lib wurde auch schon im Bibliotheksverzeichniss hinzugefügt

connecotion.h

conn.h

conn.cpp

Fehler
[Only registered and activated users can see links. Click Here To Register...]

MFG Nick

P.S. ja die Kommentare sind ein bisschen albern...
01/09/2014 21:15 snow#2
Das sieht so aus als ob da der Include, der SOCKET definiert, nicht gefunden wird.

Funktioniert es, wenn du
Code:
#include <WinSock2.h>
vor
Code:
#include <mysql.h>
setzt?

Noch ein paar Tipps:
cstdlib - der c-Präfix deklariert die C-Funktionen im std-namespace, du solltest also der Korrektheit halber std::exit(1); verwenden
fprintf(stderr, "%s\n", mysql_error(conn)); - std::cerr << mysql_error(conn) funktioniert ebenfalls und du musst dich nicht mit korrekten Formatierung rumärgern.
01/09/2014 21:27 callinq#3
Ich danke dir erst einmal, hab das schon geändert im Code, sieht auch schon viel besser aus und danke für die Tipps. ;)
Allerdings wenn ich "#include <WinSock2.h>" vor den Mysql include setze, bekomme ich einen neuen Fehler, mit dem ich wieder nichts anfangen kann.

neuer Fehler
[Only registered and activated users can see links. Click Here To Register...]

MFG Nick
01/09/2014 21:31 qkuh#4
mysql libs einbinden
01/09/2014 21:31 snow#5
Der Linker kann die von dir aufgerufenen Funktionen nicht finden. Der Include <mysql.h> hat zwar die Funktionen deklariert, die Implementierung ist aber wahrscheinlich in einer .lib (oder?), die musst du ebenfalls einbinden. Das geht unter Eigenschaften -> VC++-Verzeichnisse -> Bibliotheksverzeichnisse -> Bearbeiten und dort dann auf den Pfad deiner mysql.lib verlinken. :)

Wenn du gerade anfängst, C++ zu lernen, kann es sicherlich nicht schaden, wenn du dir mal die Zusammenhänge beim Kompilieren anschaust, so kann man viele Fehler vermeiden.
01/09/2014 21:38 callinq#6
Quote:
Originally Posted by snow911 View Post
Der Linker kann die von dir aufgerufenen Funktionen nicht finden. Der Include <mysql.h> hat zwar die Funktionen deklariert, die Implementierung ist aber wahrscheinlich in einer .lib (oder?), die musst du ebenfalls einbinden. Das geht unter Eigenschaften -> VC++-Verzeichnisse -> Bibliotheksverzeichnisse -> Bearbeiten und dort dann auf den Pfad deiner mysql.lib verlinken. :)

Wenn du gerade anfängst, C++ zu lernen, kann es sicherlich nicht schaden, wenn du dir mal die Zusammenhänge beim Kompilieren anschaust, so kann man viele Fehler vermeiden.
Quote:
Originally Posted by qkuh View Post
mysql libs einbinden
Danke euch beiden schonmal, aber die Lib hatte ich schon von vornerein mit eingebunden. Habs nur vergessen zu sagen. Tut mir leid.

[Only registered and activated users can see links. Click Here To Register...]

[Only registered and activated users can see links. Click Here To Register...]


Quote:
Originally Posted by snow911 View Post

Noch ein paar Tipps:
cstdlib - der c-Präfix deklariert die C-Funktionen im std-namespace, du solltest also der Korrektheit halber std::exit(1); verwenden
fprintf(stderr, "%s\n", mysql_error(conn)); - std::cerr << mysql_error(conn) funktioniert ebenfalls und du musst dich nicht mit korrekten Formatierung rumärgern.
Dadurch kann dann "#include <cstdlib>" weggelassen werden, oder?

MFG Nick
01/10/2014 03:56 Delinquenz#7
Quote:
Dadurch kann dann "#include <cstdlib>" weggelassen werden, oder?
Ja, sofern du keine andere Funktion daraus benutzt.

Lern C++ mit einem Buch - ein Tipp von mir.
01/11/2014 13:53 Mostey#8
Quote:
Originally Posted by Bananex45 View Post
Danke euch beiden schonmal, aber die Lib hatte ich schon von vornerein mit eingebunden. Habs nur vergessen zu sagen. Tut mir leid.

[Only registered and activated users can see links. Click Here To Register...]

[Only registered and activated users can see links. Click Here To Register...]




Dadurch kann dann "#include <cstdlib>" weggelassen werden, oder?

MFG Nick
Und trotzdem findet er die .lib nicht? Sind die auch garantiert dort in dem Ordner vorhanden? Ansonsten mal explizit linken (das hat mir mal bei einer anderen Library geholfen)

Projekteigenschaften -> Linker -> Eingabe - Zusätzliche Abhängigkeiten und dort die Namen der jeweiligen Librarys (mit .lib) hinzufügen.
01/11/2014 22:49 MrSm!th#9
Quote:
Originally Posted by Mostey View Post
Und trotzdem findet er die .lib nicht? Sind die auch garantiert dort in dem Ordner vorhanden? Ansonsten mal explizit linken (das hat mir mal bei einer anderen Library geholfen)

Projekteigenschaften -> Linker -> Eingabe - Zusätzliche Abhängigkeiten und dort die Namen der jeweiligen Librarys (mit .lib) hinzufügen.
Natürlich muss die Lib explizit gelinkt werden. Die erstgenannte Einstellung fügt lediglich das Verzeichnis zu denen hinzu, in denen nach Libs gesucht wird.
Danach muss man entweder über die nun von dir genannte Einstellung oder mithilfe von
Code:
#pragma comment(lib, "libname")
die Lib linken.
01/12/2014 00:16 callinq#10
Quote:
Originally Posted by Mostey View Post
Und trotzdem findet er die .lib nicht? Sind die auch garantiert dort in dem Ordner vorhanden? Ansonsten mal explizit linken (das hat mir mal bei einer anderen Library geholfen)

Projekteigenschaften -> Linker -> Eingabe - Zusätzliche Abhängigkeiten und dort die Namen der jeweiligen Librarys (mit .lib) hinzufügen.
Quote:
Originally Posted by MrSm!th View Post
Natürlich muss die Lib explizit gelinkt werden. Die erstgenannte Einstellung fügt lediglich das Verzeichnis zu denen hinzu, in denen nach Libs gesucht wird.
Danach muss man entweder über die nun von dir genannte Einstellung oder mithilfe von
Code:
#pragma comment(lib, "libname")
die Lib linken.
Danke erstmal euch beiden. Dennoch klappt es immernoch nicht, es wird immernoch der gleiche Fehler angezeigt.Allerdings haben all eure Tipps mich schon ein wenig weiter gebracht. :D

MFG Nick

EDIT:

Problem gelöst qkuh hat mir geholfen...

Lösung:
die libs sind für 64bit gedacht und das projekt ist 32bit.
Sowas wusste ich nicht, aber danke nochmal an qkuh. :D

MFG Nick
01/13/2014 15:16 Mostey#11
Quote:
Originally Posted by Bananex45 View Post
Danke erstmal euch beiden. Dennoch klappt es immernoch nicht, es wird immernoch der gleiche Fehler angezeigt.Allerdings haben all eure Tipps mich schon ein wenig weiter gebracht. :D

MFG Nick

EDIT:

Problem gelöst qkuh hat mir geholfen...

Lösung:
die libs sind für 64bit gedacht und das projekt ist 32bit.
Sowas wusste ich nicht, aber danke nochmal an qkuh. :D

MFG Nick
Und das lag wirklich am Projekt? ;O

Meinst du nicht eher das Betriebssystem?

Quote:
Originally Posted by MrSm!th View Post
Natürlich muss die Lib explizit gelinkt werden. Die erstgenannte Einstellung fügt lediglich das Verzeichnis zu denen hinzu, in denen nach Libs gesucht wird.
Danach muss man entweder über die nun von dir genannte Einstellung oder mithilfe von
Code:
#pragma comment(lib, "libname")
die Lib linken.
Muss sie nicht. Es gibt Auto-Linker.

Natürlich gibt's die nicht in allen Libs aber boost bietet zum Beispiel sowas an und macht das auch standardmäßig.