Problème de Compilation (avec classes)

Résolu
baptchr55 Messages postés 34 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 6 avril 2011 - 14 mars 2011 à 16:45
baptchr55 Messages postés 34 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 6 avril 2011 - 15 mars 2011 à 15:25
Bonjour à tous...
Voilà, j'ai un nouveau problème.
J'ai une classe (permettant de créer des Sockets TCP) et lorsque j'essaye de créer un objet Socket j'ai un problème de compilation. Je ne sait pas du tout d'où vient le Pb...

Si quelqu'un a une idée ???

**********Fichier Socket.cpp********
#include "socket.h"
#include <string.h>


***


//************Constructeur
my_socket::my_socket(int sock_port){


// strcpy(recev,"0:0;");

// std::cout << "constructeur\n";

//for(int t=0; t>Buff_L;t++) { recev[t]=';'; } //mise a 0 de recev

/* Acquisition d'un descripteur de socket. */
bzero((char*) &sockaddr_server, sizeof(sockaddr_server));
socket_server = socket(AF_INET, SOCK_STREAM, 0);
sockaddr_server.sin_family = AF_INET;
sockaddr_server.sin_port = htons(sock_port);
sockaddr_server.sin_addr.s_addr = htonl(INADDR_ANY);
//sockaddr_server.sin_addr.s_addr = inet_addr("192.168.0.62");


server_len = sizeof(sockaddr_server);
client_len = sizeof(sockaddr_client);

}

//************destructeur
my_socket::~my_socket(){
close(socket_client); //fermeture du socket
}


//************close
void my_socket::s_close(){
close(socket_client); //fermeture du socket
}
//************Accept
void my_socket::s_accept() {


if (socket_server == -1) { perror("socket()"); exit (EXIT_FAILURE); }
bind(socket_server, (struct sockaddr *)&sockaddr_server, server_len);

if (listen(socket_server, 10) == -1) { perror("listen()"); exit(EXIT_FAILURE); }

client_len = sizeof(sockaddr_client);
//***************
socket_client=accept(socket_server,(struct sockaddr *)&sockaddr_client,&client_len);

//ioctlsocket(socket_client, FIONBIO, 0);
}


//************Recev
char* my_socket::rcv(){
recv(socket_client, recev, Buff_L, 0);
return recev;
}
//************Send
void my_socket::snd(char to_send[Buff_L] ){
send(socket_client, to_send, (sizeof(to_send)+2), 0);
// send(socket_client, to_send, Buff_L, 0);
}

*************** Main.cpp ****************

#include
#include <stdio.h>
#include <stdlib.h>
#include "socket.h"

using namespace std;

int main()
{
my_socket mon_port(1501); //je ne fais que créer un objet !


return 0;
}


************** ERREUR **********

undefined référence to my_socket::my_socket(int)

5 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
14 mars 2011 à 18:53
Il me faut donc un #include <socket.cpp> ???

Non, surtout pas !

Il faut que tu indiques le fichier cpp dans ta compilation.
Sous Linux (désolé, je n'ai pas Windows, mais le principe est le même).
Au lieu de faire:
g++ main.cpp -o programme

Il faut faire:
g++ main.cpp socket.cpp -o programme


________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
3
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
14 mars 2011 à 17:31
- Évite les "using namespace", voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace
- On différencie généralement un nom de classe (en Pascal Case: MaClasse) d'une variable (en Camel Case: maVariable ou en C Case: ma_variable)

Ce n'est pas une erreur de compilation, mais de link. Tu ne compiles pas avec l'objet socket, c-est-à-dire que tu ne mets pas Socket.cpp dans ta chaîne de compilation.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
baptchr55 Messages postés 34 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 6 avril 2011
14 mars 2011 à 18:46
Il me faut donc un #include <socket.cpp> ???
Ce n'est pas très très commun ! Ou je nais pas saisi ?
Merci en tt cas de l'attention que tu me portes !
0
baptchr55 Messages postés 34 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 6 avril 2011
14 mars 2011 à 19:12
Je ne travail que sous UNIX ! Ceci explique bien des choses ! En général pour de programmes simples je code sous gedit mais lorsque cela se complique j'utilise codeblocks ! Je fais donc rarement ce genre de choses !
Sa me dépanne vraiment bien !
Merci beaucoup de ton aide !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
baptchr55 Messages postés 34 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 6 avril 2011
15 mars 2011 à 15:25
En ce qui concerne le caractère de fin de chaine lors de la réception d'une trame... Aurais tu une idée de comment la supprimer ??

je reçoit quelque chose de ce type :

Trame recu : 1 0 1 0 0���TJ<
Trame recu : 1 0 0 -1 0��TJ<
Trame recu : 1 0 0 1 00��TJ<

Mon main :

************************************

#include
#include <stdio.h>
#include <stdlib.h>
#include "socket.h"

using namespace std;

int main()
{
my_socket mon_port(1501);
cout<<"\nOuverture du Port 1501\n";

char *trame_sock;
trame_sock = new char[515];

std::cout << "\n\n*********Attente de commande*********\n ";
mon_port.s_accept();
while(1)
{
trame_sock=mon_port.rcv();

std::cout << "Trame recu : "<< trame_sock <<"\n";
}

return 0;
}
0
Rejoignez-nous