Notez que j’utilise le code VS sur Ubuntu 17.10 et que vous utilisez le compilateur GCC.
J’ai du mal à créer un programme simple qui utilise des fichiers .ccp supplémentaires. Je suis probablement en train de rater quelque chose d’évident ici, car je suis relativement novice en programmation, mais j’expliquerai ce que j’ai fait jusqu’à présent. C’est quelque chose qui m’empêche de continuer avec un tutoriel que je fais.
J’ai écrit un programme très simple pour démontrer mon point comme suit.
#include #include "Cat.h" using namespace std; int main () { speak(); return 0; }
#pragma once void speak();
#include #include "Cat.h" using namespace std; void speak() { std::cout << "Meow!!" << std::endl; }
Ce programme simple construit à la fois dans Codeblocks et Visual Studio Community 2017 ne pose aucun problème et je n’arrive pas à comprendre ce que je dois faire pour le faire fonctionner. Cette erreur en bas indique que le fichier Cat.ccp n’est pas du tout capté. Si je devais supprimer la définition de ce Cat.ccp dans le fichier d’en-tête, le programme comstack et fonctionne correctement, mais je dois utiliser ce fichier .ccp car je comprends que c’est la méthode acceptée pour séparer le code. Je noterai que tous les fichiers sont également dans le même dossier.
Je comprends que je pourrais avoir besoin de dire à VS Code où chercher le fichier Cat.ccp, mais il est étrange pour moi qu’il trouve l’en-tête au même endroit. Néanmoins, après avoir consulté en ligne, j’ai lu que je devais peut-être placer un répertoire dans le fichier c_cpp_intellisense_properties.json. Voici à quoi ressemble le mien.
{ "configurations": [ { "name": "Mac", "includePath": [ "/usr/include", "/usr/local/include", "${workspaceRoot}" ], "defines": [], "intelliSenseMode": "clang-x64", "browse": { "path": [ "/usr/include", "/usr/local/include", "${workspaceRoot}" ], "limitSymbolsToIncludedHeaders": true, "databaseFilename": "" }, "macFrameworkPath": [ "/System/Library/Frameworks", "/Library/Frameworks" ] }, { "name": "Linux", "includePath": [ "/usr/include/c++/7", "/usr/include/x86_64-linux-gnu/c++/7", "/usr/include/c++/7/backward", "/usr/lib/gcc/x86_64-linux-gnu/7/include", "/usr/local/include", "/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed", "/usr/include/x86_64-linux-gnu", "/usr/include", "/home/danny/Documents/C++_Projects/24_-_Classes/Cat.cpp", "${workspaceRoot}", "/home/danny/Documents/C++_Projects/24_-_Classes/", "/home/danny/Documents/C++_Projects/24_-_Classes/.vscode", "/home/danny/Documents/C++_Projects/24_-_Classes/.vscode/Cat.cpp" ], "defines": [], "intelliSenseMode": "clang-x64", "browse": { "path": [ "/usr/include/c++/7", "/usr/include/x86_64-linux-gnu/c++/7", "/usr/include/c++/7/backward", "/usr/lib/gcc/x86_64-linux-gnu/7/include", "/usr/local/include", "/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed", "/usr/include/x86_64-linux-gnu", "/usr/include", "${workspaceRoot}", "/home/danny/Documents/C++_Projects/24_-_Classes/", "/home/danny/Documents/C++_Projects/24_-_Classes/.vscode/Cat.cpp" ], "limitSymbolsToIncludedHeaders": true, "databaseFilename": "" } }, { "name": "Win32", "includePath": [ "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include", "${workspaceRoot}" ], "defines": [ "_DEBUG", "UNICODE" ], "intelliSenseMode": "msvc-x64", "browse": { "path": [ "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include/*", "${workspaceRoot}" ], "limitSymbolsToIncludedHeaders": true, "databaseFilename": "" } } ], "version": 3 }
À un moment donné, je me suis demandé si je devais append une double commande pour indiquer au compilateur de construire les deux fichiers .ccp dans le fichier tasks.json, mais je n’ai pas réussi à le faire, ni même approche.
{ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0", "tasks": [ { "label": "Build", "type": "shell", "command": "g++ -g /home/danny/Documents/C++_Projects/24_-_Classes/main.cpp -o Classes", "group": { "kind": "build", "isDefault": true }, "problemMatcher":"$gcc" } ] }
Appréciez toute aide. Et juste au cas où vous vous poseriez la question, la raison pour laquelle je ne termine pas seulement le didacticiel dans Codeblocks ou VS Community est que j’aime savoir ce qui se passe sous le capot dans la plupart des cas. De plus, je voudrais que VS Code fonctionne pour moi car il a été génial jusqu’à présent.
Si vous avez plusieurs fichiers et que l’un dépend d’un fichier cpp
pour un autre, vous devez également demander à g ++ de le comstackr pour que l’éditeur de liens puisse le trouver. Le moyen le plus simple serait:
$ g++ Cat.cpp main.cpp -o Classes
En parallèle, vous devriez probablement comstackr avec des avertissements, minimalement -Wall
, probablement -Wextra
, et éventuellement -Wpedantic
, de sorte que vous sachiez si quelque chose que vous faites est problématique.
Cela fera-t-il une différence si les extensions de fichier sont ccp ou cpp?
"tasks": [ { "label": "echo", "type": "shell", "command": "g++", "args":[ "-g","main.cpp","cat.cpp" ], "group": { "kind": "build", "isDefault": true } }
Ajoutez simplement cat.cpp dans args, puis essayez de vous lancer. Il devrait fonctionner sans erreur sur le code VS