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

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
$ c++ -std=c++11 -g -O2 MyArray.cpp
Tout ce passe bien.

---

Sinon si je place la fonction main dans le fichier main.cpp

J'obtiens le traceback suivant:

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
Et je ne comprends pas.

---

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:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
...
{ std::cerr << "index out of bounds" << std::endl ; } }  ;
...
Alors que j'ai remplacer ce string : "index out of bounds" a été" remplacer par e.what() et que

du coup la sortie est du coup très bizarre de ne pas voir comme traceback:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
...
{ std::cerr << e.what() << std::endl ; } }  ;
...
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 !

---

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.