2010-05-18 6 views
1

J'ai deux ou trois méthodes déclarées au niveau de l'espace de noms dans un en-tête pour une classe:Lien entre l'espace de noms fonctions

// MyClass.h 

namespace network { 

int Method1(double d); 
int Method2(double d); 

class MyClass 
{ 
    //... 
} 

} 

alors défini dans

//MyClass.cpp 

int 
Method1(double d) 
{ ... } 

int 
Method2(double d) 
{ ... } 

Ce projet compile proprement et est une dépendance pour un projet d'interface utilisateur qui utilise MyClass. Les fonctions étaient auparavant des fonctions membres de MyClass, mais elles ont été déplacées dans l'espace de noms car c'était plus approprié.

Mon problème est le projet se plaint ui quand il arrive à l'éditeur de liens:

1> network.lib (MyClass.obj): erreur LNK2001: symbole externe non résolu "réseau int __cdecl :: Method1 (double)" (? INT @ ds @ sim @@ YAHN @ Z)

1> network.lib (MyClass.obj): erreur LNK2001: symbole externe non résolu "int __cdecl network :: Method2 (double)" (? CINT @ ds @ sim @@ YAHN @ Z)

Qu'est-ce que je fais mal?

Répondre

2

Il semble que vous ayez placé les déclarations de fonction dans un bloc d'espace de noms, mais que vous ayez oublié de placer également les implémentations de fonction dans un bloc d'espace de noms. Essayez:

namespace network { 
    int 
    Method1(double d) 
    { ... } 

    int 
    Method2(double d) 
    { ... } 
} 
+0

Oui c'était ça - idiot moi. D'un côté, quel effet at-il sur les fonctions de l'espace de noms? –

1

Vous devez également placer les fonctions du fichier .cpp dans l'espace de noms. Le compilateur pense qu'ils sont deux choses complètement différentes!

Questions connexes