Où mettre les .h et .cpp avec platformIO

Bonjour,

Je suis en train d'apprendre le C++, je suis dans l'étape "Utiliser plusieurs fichiers"
Et je rencontre un soucis sur l'emplacement des .h et .cpp.
Voici le main

#include <Arduino.h>
#include <fct.h>

void setup() {
  // put your setup code here, to run once:
  int result = myFunction(2, 3);
}

void loop() {
  // put your main code here, to run repeatedly:
}

Voici le fct.h

#ifndef FCT_H
#define FCT_F

// put function declarations here:
int myFunction(int, int);
#endif

Et voici le fct.cpp

#include <fct.h>

// put function definitions here:
int myFunction(int x, int y) {
  return x + y;
}

Si je met les 3 fichier dans le répertoire "src", pas d'erreur à la compilation.

Si je met le .h dans le répertoire "include" et fct.cpp dans le répertoire "lib", comme préconisé dans les readme j'ai l'erreur
Projects\Test_CPP/src/main.cpp:6: undefined reference to `myFunction(int, int)'

Merci pour votre aide

PS: je suis sous W11 avec Visual Studio Code et PlatFormio

J’ai édité le titre pour rajouter platformIO

Avec l’IDE arduino vous mettez tout dans le répertoire du sketch.

(Pour votre code de test le compilateur va tout virer car il n’y a aucun effet de bord donc votre classe ne sera même pas inclus, Ajoutez un Serial.begin() et un print pour que tout le code soit dans le binaire final)

Merci pour le titre et pour votre aide
Ok, mais à quoi servent les sous-répertoire lib et include?

Bonjour,
VScode est un IDE professionnel qui crée les dossiers habituels même avec l'outil platformio. notamment les répertoires Include et src qui sont la base de la programmation C++. Votre façon de faire est la bonne, il faut juste faire attention aux erreurs de syntaxe.

#define FCT_H
#include "fct.h"

Bonjour,
Merci pour votre réponse.

Si je corrige les erreurs de frappes j'ai toujours le même soucis. Idem avec des " ou des <.

Pour info voici mon platformio.ini

[env:denky32]
platform = espressif32
board = denky32
framework = arduino

Par contre ce qui fonctionne est de mettre le fct.h dans le répertoire include et le fct.cpp dans le répertoire src et pas dans lib

Tu peux mettre tes fichiers include.h et le include.cpp ensemble soit dans le ./src, soit dans le ./include.
Tu peux aussi les placer dans le ./lib dans le cas où tu souhaites construire une bibliothèque à vocation réutilisable. Il sera alors utile d'y créer un sous-répertoire par bibliothèque avec une arborescence permettant de classer tes fichiers (src, examples, docs, ...)

D'accord, merci pour ces précisions

Ce qui est le fonctionnement normal. Ces noms de répertoire sont propres à l'IDE ils peuvent être différents dans un autre IDE
Le répertoire include contient les déclarations c'est à dire les headers ou fichiers .h
Le répertoire src contient les sources c'est à dire les .cpp
Le répertoire libdeps (librairies dépendances) contient les librairies externes que vous ajoutez dans votre projet
Les autres répertoires dont lib sont pour des utilisations plus avancées

Ce n'est pas forcément expliqué en détail dans les cours la façon de passer d'une programmation monobloc à une compilation séparée mais je vous assure que vous avez bien compris et appliqué la bonne méthode en créant votre fichier .h et votre fichier.cpp.
En conservant votre façon de travailler vous pouvez tester avec un second .h et .cpp pour faire un produit par exemple. Je vous conseille de donner un nom représentatif à vos fichiers ex: fonctionAddition, fonctionProduit etc... plutôt que fct, fct1 etc...

Merci pour ce complément d'informations qui va me permettre de continuer sereinement.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.