Bonjour, je débute en c++, et là j'essaye de me faire une todo-list en CLI. Je ne vous cache pas que comme je suis débutant, je me passerais bien des objets, mais lorsque j'utilise juste plus de 1 fonction, mon IDE, attend le constructeur des autres fonctions. Bref du coup j'ai fait ce code:

main.cpp:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdlib.h> 
#include <iostream>
#include <string>
#include <fstream>
#include "../include/main_functions.hpp"
#include "./todo.cpp"
 
using namespace std;
 
int main(int argc, const char *argv[]) {
    //Set global filepath var.
    string const fileName("./todo.txt");
 
    todo item("");
 
 
    if(argc < 2) {
        cout << "Usage: todo <parameter>!" << endl;
        return -1;
    }
    if(std::string(argv[1]) == "todo" && std::string(argv[2]) == "-a") {
        item.add(fileName, argv[3]);
    }
    if(std::string(argv[1]) == "todo" && std::string(argv[2]) == "-d") {
        item.del(fileName, atoi(argv[3]));
    }
 
    return 0;
}
todo.cpp:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <stdlib.h> 
#include <iostream>
#include <string>
#include <fstream>
 
#include "../include/main_functions.hpp"
 
using namespace std;
 
void todo::add(string file, string arg) {
 
    ofstream monFlux(file.c_str(), ios::app);
 
    if(monFlux) {
        monFlux << arg << endl;
    }
    else {
        cout << "ERREUR: Impossible d'ouvrir le fichier." << endl;
    }
}
 
void todo::del(string file, int line_erase) {
    std::string Buffer = ""; //Variable contenant le texte à réécrire dans le fichier
    std::ifstream ReadFile(file);
    if (ReadFile) { //Si le fichier est trouvé
        std::string line;
        int Line = 0;
        while (std::getline(ReadFile, line)) { //on parcours le fichier et on initialise line à la ligne actuelle
            Line++;
            if(Line != line_erase) //Si la ligne atteinte est différente de la ligne à supprimer...
                Buffer += line + "\n"; //On ajoute le contenu de la ligne dans le contenu à réécrire
        }
    }
    ReadFile.close(); //On ferme le fichier en lecture
 
    std::ofstream WriteFile(file); //On ouvre ce même fichier en écriture
    WriteFile << Buffer; //On écris le texte dedans
    WriteFile.close(); //et on ferme le fichier
}
main_functions.hpp:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#ifndef main_functions_hpp
#define main_functions_hpp
 
#include <stdlib.h> 
#include <iostream>
#include <string>
#include <fstream>
 
//functions prototypes
 class todo {
 
 public:
    todo();
    todo(std::string empty);
    void add(std::string file, std::string arg);
    void del(std::string file, int line_erase);
 
private:
    std::string file, arg;
    int line_erase;
 }; // todo
 #endif /*main_functions_hpp*/
Et lorsque je compile : g++ main.cpp -o todo, voici ce que j’obtiens :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Undefined symbols for architecture x86_64:
  "todo::todo(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)", referenced from:
      _main in main-d3f965.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Comment puis-je faire ? (Merci d'avance pour votre aide)