Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ KDevelop, multiple definition
Hallo Leute,
ich bin grad am verzweifeln, KDevelop bringt mir dauernd diese Meldung:
CServer.o(.text+0x12):/home/micha/vino2003/vino2003/CServer.cpp:11: first defined here
main.o(.text+0x46c): In function `CServer::getSockfd(int)':
/home/micha/vino2003/vino2003/CServer.cpp:17: multiple definition of `CServer::getSockfd(int)'
CServer.o(.text+0x18):/home/micha/vino2003/vino2003/CServer.cpp:17: first defined here
............... und noch weitere Methoden
g++ kompiliert ohne Probleme.
Ich hab nun gelesen dass es am LInker liegt aber wie beseitige ich dieses Problem ??
das habe ich auch schon drin:
#ifndef __CServer_H
#define __CServer_H
#endif
Jemand einen Rat ??
Thanks
anda_skoa
06-06-2003, 21:09
Hmm, das sieht so aus, als hättest du zweimal den Body der Methode.
Wie sehen CServer.cpp und main.cpp aus?
Ciao,
_
ich hoffe das reicht, wollte nicht das komplette hier posten.
Wie gesagt, nur mit dem g++ läuft die Sache :-(
***************************
CServer.h
-------------
#ifndef __CServer_H
#define __CServer_H
#include <stdio.h>
#include <errno.h>
#include <string>
/* Windows-System */
#ifdef _WIN32
#include <winsock.h>
#include <io.h>
/* Unix-System */
#else
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <unistd.h>
#endif
#define HTTP_PORT 80
class CServer
{
............................
*************************
CServer.cpp
-------------------------
#include "CServer.h"
dann die Methoden
z.B.
int CServer::getSockfd(int port)
{
sockfd=socket (AF_INET, SOCK_STREAM, 0);
if (sockfd != -1)
{
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(port);
my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
}
else
{
perror("socket()");
}
return sockfd;
};
*******************
main.cpp
-------------
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <stdio.h>
#include <errno.h>
#include <string>
#include <iostream>
#include <cstdlib>
#include "wein.cpp"
#include "meth.cpp"
#include "CServer.cpp"
using namespace std;
int
main (int argc, char *argv[])
{
............................................
Ach so, falls sich hier einer wundert was ich hier treibe.
Ich versuche mir die Socket geschichte zu vereinfachen (Objektorientiert) und bastele mir hier eine Klasse zusammen !!!!!
Sie funktioniert auch , nur senden / empfangen habe ich nocht nicht getestet.
#include "wein.cpp"
#include "meth.cpp"
#include "CServer.cpp"
das sieht hier ganz komisch, sowas sollte man nicht machen.
schmeiss es raus hier raus und lass die dateien einzeln kompilieren
und dann zusammen linken.
gruss
Arthur
@arthur
aber wenn ich da wegmache dann meckert KDevelop.
Was du vorgeschlagen hast, wie kann ich das unter KDevelop machen ?
Gruß
es gibt doch bei kdevelop unter projekte die funktion "vorhandene
dateien hinzufügen".
damit könntest du die .cpp dateien zu deinem projekt hinzufügen.
gruss
Arthur
aber das habe ich die ganze Zeit schon.
Er finden aber die Klassen nicht mehr, wenn ich die #include lösche.
Im Projekt sind diese aber !!
dann weiter :)
natürlich muss main die sachen kennen,
dafür reichen aber die header:
#include "wein.h"
#include "meth.h"
#include "CServer.h"
wein.h und meth.h sind doch klassen mit headern?
gruss
Arthur
ohhh mannnnnn, was für ein "bescheidener" Denkfehler !!!
kaum macht man es richtig und schon läufts ;-)
Nach 12 Stunden C++ läuft es nicht mehr so gut da oben ;-)
vielen Dank !!!
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.