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:
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 #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; }
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
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 }
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
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*/
Comment puis-je faire ? (Merci d'avance pour votre aide)
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)
Partager