2010-03-16 9 views
3

Je viens tout juste de migrer de C# vers C++/CLR. D'abord j'étais ennuyé, que j'ai dû écrire deux fois toutes les déclarations de classe (en .h et .cpp). Puis j'ai compris, que je pourrais placer le code aussi dans les fichiers h - il compile au moins. Eh bien, j'ai supprimé tous les cpp de mes cours et maintenant je me suis rendu compte que VS ne me donnerait pas d'Intellisense quand je travaille sur mes fichiers h. Je suppose que je ne devrais pas placer mon code dans les hfiles (le code ne sera pas réutilisé dans d'autres projets à coup sûr), mais je trouve ça terrible d'ajuster toutes les déclarations de méthode à deux endroits ... Plus je dois passer d'avant en arrière pour voir quel modificateur ma méthode etc. et il n'est pas bien tous en un seul endroit comme en C# (avec ses avantages et ses inconvénients). Je suis désolé, c'est une question de débutant, mais je voulais juste m'assurer qu'il n'y a aucune possibilité d'activer intellisense pour hfiles. Ou au moins d'apprendre que je suis tout à fait sur le mauvais chemin ...Intellisense dans les fichiers d'en-tête

Merci, David

Répondre

0

Vous faites exploser l'intellisense hors de l'eau parce que le code pour chaque classe est incorporé dans chaque fichier d'implémentation, et c'est juste plus de données que l'Intellisense peut analyser de manière fiable. Il commence à échouer en raison des délais d'attente.

Je sais que vous avez dit que c'est ennuyeux, mais vous devez mettre la classe deux fois - c'est comme ça que fonctionne C++. Si vous voulez qu'il se comporte comme C#, utilisez C#. De toute façon, c'est un meilleur langage pour la plateforme .NET.

+0

N'existe-t-il pas un outil/un addin permettant de placer automatiquement les définitions dans les fichiers h et cpp? – David

+0

@David: Nous souhaitons !! – quamrana

+0

@David: Même si VS2010 sort (ce qui corrige ce problème d'intellisense particulier) cela ne sera toujours pas bon, parce que votre exécutable sera ÉNORME parce que le code doit être réimplémenté dans chaque fichier .cpp qui utilise une classe si elle est en ligne comme vous le décrivez dans l'en-tête. Ne vous battez pas la langue ici - c'est ainsi qu'elle est conçue. Si vous n'aimez pas cela, retournez en C#. C++/CLI est plus pour pouvoir réutiliser le code C++ existant, pas pour le nouveau développement, à ma compréhension (quoique limitée). –

1

Vos fichiers .h doivent contenir des déclarations. vos fichiers .cpp, définitions.

Voici un exemple:

b.h

#ifndef B_H  
#define B_H 

    class B 
    { 
     public: 
     int foo(); 
     void Set(int x); 

     private 
     int data_; 
    }; 

#endif 

b.cpp

#include <stream> 
#include "b.h" 

int B::foo() 
{ 
    std::cout << "data value " << data_; 
    return data_; 
} 

void B::Set(int x) 
{ 
    data_ = x; 
} 

Tout lieu que vous allez utiliser des objets de type B, vous #include B.H. L'implémentation est seulement dans b.cpp Si vous faites cela, intellisense devrait fonctionner

+0

Yup +1. C'est ce qui doit arriver. –

+0

'b.h' contient 2' # endif'. Le premier, après le '# define' devrait être enlevé. :-) –

+0

@Thomas: corrigé. – quamrana