PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ KDevelop, multiple definition



UserD
06-06-2003, 19:17
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,
_

UserD
06-06-2003, 21:56
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[])
{
............................................

UserD
06-06-2003, 22:00
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.

arthur
06-06-2003, 22:02
#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

UserD
06-06-2003, 22:08
@arthur

aber wenn ich da wegmache dann meckert KDevelop.

Was du vorgeschlagen hast, wie kann ich das unter KDevelop machen ?

Gruß

arthur
06-06-2003, 22:35
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

UserD
06-06-2003, 22:40
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 !!

arthur
06-06-2003, 22:53
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

UserD
06-06-2003, 23:05
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 !!!