2010-07-29 7 views
0
 
------------------blah.h------------------------ 
#pragma once 
namespace SomeNamespace{ 
static void someMethod(){} 
} 
-----------------blah.c-------------------------- 
#include “blah.h” 
int main(int argc, char**argv){ 
SomeNamespace::someMethod(); 
return 0; 
} 

Les travaux ci-dessus bien, mais si je laisse de côté « statique » je reçois:erreur de couplage avec des fonctions non-membres

 

>stdafx.obj : error LNK2005: "void __cdecl SomeNamespace::someMethod(void)" 
([email protected]@@YAXXZ) already defined in Dude.obj 
1>...\Debug\Dude.exe : fatal error LNK1169: one or more multiply defined 
symbols found 

Je lis au sujet de ce « statique » ne à des fonctions non-membres - http://www.velocityreviews.com/forums/t284052-static-functions.html ...

... lui donnent une liaison interne afin qu'il ne sera pas visible en dehors de l'unité de compilation - à savoir (sur-simplifié) l'éditeur de liens ne le verra pas. Cette utilisation de 'static' est déconseillée et impose la limitation selon laquelle la fonction ne peut pas être utilisée comme argument de modèle. La façon moderne est de placer à la place la fonction dans un espace de noms anonyme ...

Mais la chose est que je veux la méthode à être exposé. Qu'est-ce que je fais mal?

Répondre

1
  • Déclare votre fonction dans .h (à savoir void foo(int x);)
  • Définir puis en .c (à savoir void foo(int x) { ... })
Questions connexes