Erreur de débutant - Compilation G++ (macOS)
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:
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:
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:
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:
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)