Eigene Header erstellen, wie?



  • Hallo,
    ich habe ein kleines Problem. Zuerst muss ich sagen, dass ich mich noch nie so richtig mit Headern beschäftigt habe 😞

    Ich arbeite momentan an einer Art "Wrapper" für MySQL, nun habe ich zuerst die Funktionsdeklarationen in einer Header-Datei ausgelagert, während die Funktionsdefinitionen noch in meiner main.cpp verblieben sind, was auch super funktionierte, der nächste Schritt, die Funktionsdefinitionen in eine eigene C-Datei auszulagern funktionierte leider nicht mehr. Auf einmal wirft der Compiler fehlermeldungen, die sich auf die mysql.h beziehen aus Ich habe folgenden Code:

    main.cpp

    #include <stdio.h>
    #include "xsql.h"
    
    using namespace std;
    
    int WINAPI WinMain (HINSTANCE hThisInstance,HINSTANCE hPrevInstance,LPSTR lpszArgument,int nFunsterStil)
    {
        ...
    }
    

    xsql.h:

    #include <mysql/mysql.h>
    
    int xsql_connect(char *,char *,char *);
    void xsql_close();
    int xsql_select_db(char *);
    MYSQL_RES *xsql_query(char *);
    MYSQL_ROW xsql_fetch_array(MYSQL_RES *);
    

    xsql.c:

    #include "xsql.h"
    
    MYSQL mysqlconn;
    
    int xsql_connect(char *host,char *user,char *passwd)
    {
    	if(mysql_init(&mysqlconn)==NULL)
    	{
    		return -1;
    	}
        if(mysql_real_connect(&mysqlconn,host,user,passwd,NULL,0,NULL,0)==NULL)
        {
            return -1;
        }    
        return 0;
    }
    
    void xsql_close()
    {
    	mysql_close(&mysqlconn);
    }
    
    int xsql_select_db(char *db)
    {
    	if(mysql_select_db(&mysqlconn,db)!=0)
    	{
    		return -1;
    	}
    	return 0;
    }
    MYSQL_RES *xsql_query(char *query)
    {
    	if(mysql_real_query(&mysqlconn,query,strlen(query))!=0)
    	{
         	return NULL;
    	}
     	return mysql_store_result(&mysqlconn);
    }
    
    MYSQL_ROW xsql_fetch_array(MYSQL_RES *result)
    {
        return mysql_fetch_row(result);
    }
    

    Die globale Variable mysqlconn aus der xsql.c wird nur von den Funktionen in xsql.c verwendet. Wenn ich nun aber kompiliere meckert der Compiler zuerst über die mysql.h, die doch richtig sein muss (die stammt ja nicht von mir 🙂 )

    In file included from ../include/mysql/mysql.h:57,
                     from v:/Dev C++ Projects/SF36/xsql.h:1,
                     from v:/Dev C++ Projects/SF36/xsql.c:1:
    ../include/mysql/mysql_com.h:116: 'SOCKET' is used as a type, but is not
       defined as a type.
    ../include/mysql/mysql_com.h:180: `SOCKET' was not declared in this scope
    ../include/mysql/mysql_com.h:180: parse error before `,' token
    v:/Dev C++ Projects/SF36/xsql.c: In function `int xsql_connect(char*, char*,
       char*)':
    v:/Dev C++ Projects/SF36/xsql.c:7: `NULL' undeclared (first use this function)
    v:/Dev C++ Projects/SF36/xsql.c:7: (Each undeclared identifier is reported only
    
       once for each function it appears in.)
    

    Kann es was mit dem linken zu tun haben? Ich muss mein Programm ja gegen die mysqllib linken, aber dann dürfte doch der Compiler eigentlich nicht meckern, oder?

    Vielen Dank schonmal für Tipps und Ratschläge,
    David.



  • Hallo,

    Also der erste Fehler sagt dir ja das der Typ SOCKET unbekannt ist. Ich weiss nicht in welchem Header er bei dir definiert ist und ob er überhaupt irgendwo definiert ist. Wenn dem so ist musst du den Header in in xsql.h über
    #include<mysql/mysql.h> einfügen.

    Das zweite Problem dürfte sich lösen lassen indem du #include<cstdlib> in xsql.h einfügst.



  • Hallo,

    Danke, für Deine Antwort, die hat mich auf den richtigen Trichter gebracht. Ich habe nun die windows.h, die ich auch in main.cpp included habe, in der xsql.h included und nun funktioniert es. Diese .h-Datei definiert dann vermutlich SOCKET und NULL etc., im nachinein betrachtet ist das ja auch ganz logisch. Ich saß mal wieder auf der Leitung 🙂


Anmelden zum Antworten