Salut les C++,
dans le cadre d'un tutoriel j'ai écrit un petit conteneur basé sur du C (Que je préfère au C++) en C++
Vous trouverez le zip ici.
Le zizip contient 4 fichiers:
+ MyArray.h
+ MyArray.cpp
+ main.cpp
+ Makefile
Si je place le code qui devrai être dans main.cpp dans MyArray.cpp et que je compile avec un terminal
Tout ce passe bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2$ c++ -std=c++11 -g -O2 MyArray.cpp
---
Sinon si je place la fonction main dans le fichier main.cpp
J'obtiens le traceback suivant:
Et je ne comprends pas.
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 g++ -Wall -pedantic -Wno-deprecated -Wno-deprecated-declarations -g -O2 -std=c++11 -c src/MyArray.cpp -o src/MyArray.o g++ -Wall -pedantic -Wno-deprecated -Wno-deprecated-declarations -g -O2 -std=c++11 -c src/main.cpp -o src/main.o In file included from src/main.cpp:1:0: src/./MyArray.h: In instantiation of T& MyArray<T>::get_element(size_t) [with T = double; size_t = long unsigned int]: src/main.cpp:26:23: required from here src/./MyArray.h:37:48: warning: statement has no effect [-Wunused-value] T& get_element(const size_t index) { try { index < size ; return Array[index] ; } catch (std::out_of_range) { std::cerr << "index out of bounds" << std::endl ; } } ; ^ g++ -Wall -pedantic -Wno-deprecated -Wno-deprecated-declarations -g -O2 -std=c++11 -o ./bin/MyArray ./src/MyArray.o ./src/main.o ./src/main.o*: Dans la fonction «*main*»*: /home/edward/Bureau/MyArray/src/main.cpp:9*: référence indéfinie vers «*MyArray<double>::MyArray(unsigned long, double)*» /home/edward/Bureau/MyArray/src/main.cpp:44*: référence indéfinie vers «*MyArray<double>::bubble_sort(bool)*» collect2: error: ld returned 1 exit status Makefile:480*: la recette pour la cible «*bin/MyArray*» a échouée make: *** [bin/MyArray] Erreur 1
---
Je me dis que cela doit être un problème de linker simplement a cause de make.
Le problème ou plutot ce qui est bizarre est que:
le traceback dit:
Alors que j'ai remplacer ce string : "index out of bounds" a été" remplacer par e.what() et que
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ... { std::cerr << "index out of bounds" << std::endl ; } } ; ...
du coup la sortie est du coup très bizarre de ne pas voir comme traceback:
A moins que make ai mis le traceback en cache ? ce que je fends car j'ai compiler les fichiers un par un en fichier objet et les ai linker !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ... { std::cerr << e.what() << std::endl ; } } ; ...
---
En espérant que cela soit une erreur interne du c++ ou de make.
Merci pour votre aide.
---
Note: Je suis en train d'écrire un gros tutoriel et j'espère que vous en serai, vous comprendrez après.
Partager