Problème de Compilation (avec classes)

[Résolu]
Signaler
Messages postés
34
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
6 avril 2011
-
Messages postés
34
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
6 avril 2011
-
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

Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
122
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
Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
122
- É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
Messages postés
34
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
6 avril 2011

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 !
Messages postés
34
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
6 avril 2011

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 !
Messages postés
34
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
6 avril 2011

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;
}