Je reçois une référence indéfinie lorsque j'essaie d'utiliser des variables de mon espace de noms. J'ai créé un fichier d'en-tête et un fichier de mise en œuvre avec l'espace de noms en elle et essaie d'utiliser l'espace de noms dans un autre fichier ...Non défini Référence aux espaces de noms en C++
ÉDITÉ:
//first.h
namespace first
{
extern int var;
extern int multiplyVar(int);
}
//first.cpp
namespace first
{
int var = 5;
int multiplyVar(int mult)
{
return mult * var;
}
}
//someOtherFile.h
#include "first.h"
//someOtherFile.cpp
first::var = 3;
int newVar = first::multiplyVar(3);
//error
undefined reference to 'first::multiplyVar(...)'
undefined reference to 'first::var'
EDIT Code actuel
//jFork.h
#ifndef JFORK_H
#define JFORK_H
#include <iostream>
#include <string>
using namespace std;
namespace jFork
{
extern int sockfd, newsockfd;
int j_fork(string);
}
#endif //JWDSFORK_H
//jFork.cpp
namespace jFork
{
int sockfd = 0, newsockfd = 0;
int j_fork(string name)
{
cout<<"Preparing to fork: "<<name<<endl;
int rv = fork();
cout<<"Called fork(): "<<name<<endl;
switch(rv)
{
case -1:
cout<<"Exiting..."<<endl;
exit(EXIT_FAILURE);
break;
case 0:
if(sockfd)
{
cout<<"Closing sockfd: "<<name<<endl;
close(sockfd);
sockfd = 0;
}
if(newsockfd)
{
cout<<"Closing newsockfd: "<<name<<endl;
close(newsockfd);
newsockfd = 0;
}
break;
default:
cout<<"Preparing to sleep: "<<name<<endl;
sleep(1);
cout<<"Woke up from sleep"<<name<<endl;
break;
}
return rv;
}
}
//server.cpp
int pid = jFork::j_fork(name);
avez-vous défini ces choses dans l'espace de noms en questionion dans le fichier .cpp? – PlasmaHH
Je suis assez sûr que "first.cpp" ne compilera pas. Avez-vous copié-collé votre code ou est-ce un pseudo-pseudo-sorta? –
@ Robᵩ son genre de psuedocode un peu ... – user1185853