2013-07-29 3 views
0

Je veux ajouter un #include directive à mon fichier A.cpp, et le fichier d'en-tête Bh est dans le dossier deux couches vers le haut (par exemple, si le fichier source est en * E: \ A \ B \ C \ D \ E \ F \ G \ H *, le fichier d'en-tête est dans * E: \ A \ B \ C \ F *, bien sûr, les noms seront beaucoup plus long que cela) , donc je tapé cette déclaration confusion dans Visual studio 2010:Pourquoi ce #include déroutant ".. .. [etc .. etc.]" travail de travail?

#include"../../ 

et la fonction IntelliSense dans VS 10 a montré une liste des fichiers et Bh est dedans! Je ne sais pas si cette affirmation est correcte, mais je pense que quelque chose ne va pas dans ce cas. Quelqu'un d'entre vous pourrait-il me dire si c'est faux ou correct? Et pourriez-vous me donner une meilleure solution pour cela? Merci beaucoup.

+1

Pourquoi pensez-vous qu'il y a quelque chose qui ne va pas? Tout cela me semble correct. –

+0

Peut-être parce que c'est fragile? – Jiminion

+1

Comment est-il plus fragile que de devoir passer un drapeau '-I' (ou quel que soit l'équivalent MSVC) au compilateur? –

Répondre

2

Pourquoi cela ne fonctionnerait-il pas? Avez-vous déjà fait cd ../../mydir et vérifié ce que cela fait? C'est l'équivalent de ça. .. et . pointent vers un répertoire spécial dans Windows et Linux. . est le répertoire en cours tandis que .. est le répertoire précédent. Donc, ../../file.h irait deux répertoires de retour pour trouver le fichier que vous recherchez. Après tout, les travaux déclaration #include "..." avec le chemin relatif au fichier se trouve dans. En général, lors de l'écriture des bibliothèques et vous avez un detail sous-répertoire principal vous, il tenterait d'accéder via #include "../detail/myfile.hpp", tandis que d'autres bibliothèques telles que boost opter pour #include <boost/config/myfile.hpp>

+0

Merci de me le dire. C'est très bien de ta part. – Blip

0

Je pense qu'il est préférable d'inclure le paramètre "-I <INCLUDE_DIR>" à votre build et juste #include l'en-tête sans le répertoire indiqué. C'est là que vous dites au compilateur et à l'éditeur de liens de rechercher vos fichiers d'en-tête.

+0

Comment puis-je inclure ceci? Puis-je utiliser l'invite de commande VS 2010? – Blip

+0

Allez dans les propriétés de votre projet, il y a une option incluse. –

+0

Je pense que le passage d'un drapeau -I est une meilleure solution, selon le commentaire fait par Carl Norum – Blip

-1

..\ vous déplace d'un répertoire, alors ..\..\ vous déplacera vers le haut de deux répertoires. Je suppose que c'est bien si vous pouvez supposer que l'emplacement du script ne changera jamais. Si, toutefois, vous avez déplacé le script sur un lecteur différent, vous auriez des problèmes. Il pourrait être préférable d'inclure E: \ A \ B \ C \ D \ E \ F \ B.h à la place de la preuve future.

+1

Vous dites "script" lorsque la question concerne le C++. Je ne peux pas imaginer quel genre de programmeur suggérerait des chemins d'inclusion locaux codés en dur au lieu d'utiliser des chemins relatifs cohérents. – DanielKO

+0

Je pense que je peux coller cet emplacement de fichier à partir de l'Explorateur Windows, mais si je change l'emplacement, il faudra beaucoup d'efforts pour changer toutes les références de cet emplacement. Mais je vais vous remercier pour votre suggestion. – Blip

+0

@DanielKO Je parlais simplement en termes généraux car cela pourrait s'appliquer à n'importe quel nombre de langues. Sur la base de la question, nous n'avons aucune idée de la portée du projet. J'admets que j'ai supposé que c'était à petite échelle en fonction de la question elle-même, ce qui est mon mauvais. De toute évidence, je ne préconiserais pas cela dans un environnement de production, mais quel mal y a-t-il dans quelque chose de petit. – LoganGoesPlaces