9
votes

Méthodes en ligne statique?

D'accord,

Voici ce que j'essaie de faire ... En ce moment, il s'agit de la compilation mais d'échec à la liaison ... LNK2001

Je veux les méthodes statiques car il n'y a pas de membre Les variables, mais je les souhaite également en ligne pour les accélérations qu'ils fournissent.

Quelle est la meilleure façon de faire cela? Voici ce que j'ai en un mot: xxx

J'essaie de le faire parce que je veux pouvoir aller: xxx

FOO n'a pas de variables de membre ... Cela n'a pas de sens.


2 commentaires

De plus, d'un point de vue du design, serait-il possible d'utiliser une référence à un flotteur plutôt qu'à un pointeur? Une référence est généralement préférée.


Oui, je sais ... mais dans ce cas je ne peux pas me contenter de la dynamisme :)


4 Réponses :


3
votes

Vous devez définir votre fonction inline dans le fichier d'en-tête et non un fichier de mise en œuvre distinct. Les définitions sont nécessaires lorsque le fichier d'en-tête est #Inclus, s'ils sont espérons être inlinés, après tout.

La défaillance de la liaison que vous voyez est que la déclaration (dans le fichier d'en-tête) n'informe pas le compilateur que la méthode doit être en ligne, alors que la mise en œuvre est en ligne, donc non disponible pour la liaison.


0 commentaires

10
votes

Si vous appelez la barre d'un autre fichier CPP, autre que FOO.CPP, il doit être dans un fichier d'en-tête.


0 commentaires

4
votes

Tout d'abord, je les mettrais dans un espace de noms plutôt, car il n'y a pas de logique du tout dans ce "classe" . Deuxièmement, vous pouvez définir le corps des fonctions dans le fichier d'en-tête directement pour permettre au compilateur de les voir. Sinon, vous avez besoin de Optimisation du programme entier à effectuer par la liaison pour l'inlinication de ces fonctions (AFAIK).


1 commentaires

Ouais tu as probablement raison de l'espace de noms ... je les ai eu dans des cours parce qu'ils avaient toutes une fonctionnalité similaire



1
votes

Les fonctions généralement intégrées sont implémentées où elles sont déclarées (dans le fichier d'en-tête). Le compilateur est libre de fonctions en ligne que vous les avez, mais vous ne pouvez pas force pour rien en ligne. Si vous utilisez Visual C ++, activez "Inline Toute ligne appropriée", "Génération de code temporel de liaison" et "Favoriser le code rapide".


0 commentaires