Bonjour,
Je teste actuellement le code C++ ci-dessous. Pour résumer, est implémentée une classe NeuralNetwork avec 4 attributs et 2 constructeurs, un par défaut et l'autre prenant un vector<int> en argument, et le main a pour seule utilité de tester le bon fonctionnement de ces constructeurs.
Main :
Code :
- #include <iostream>
- #include <fstream>
- #include <cmath>
- #include <random>
- #include <ctime>
- #include <vector>
- #include "NeuralNetwork.h"
- int main(){
- srand(time(NULL));
- std::vector<int> sizes({1,2,3});
- NeuralNetwork neurones();
- NeuralNetwork neurones2(sizes);
- return 0;
- }
|
NeuralNetwork.h :
Code :
- #include <iostream>
- #include <fstream>
- #include <cmath>
- #include <random>
- #include <ctime>
- #include <vector>
- class NeuralNetwork{
- protected:
- std::vector< int > sizes;
- std::vector< std::vector< double > > neuronestates;
- std::vector< std::vector< double > > B;
- std::vector< std::vector< double > > Omega;
- public:
- NeuralNetwork(std::vector<int> sizes_init);
- NeuralNetwork();
- };
|
NeuralNetwork.cpp :
Code :
- #include "NeuralNetwork.h"
- NeuralNetwork::NeuralNetwork(std::vector<int> sizes_init){
- sizes = sizes_init;
- neuronestates = std::vector< std::vector< double > >(sizes.size());
- for( int i=0;i<sizes.size();i++){
- neuronestates[i] = std::vector < double > (sizes[i]);
- }
- Omega = std::vector< std::vector< double > >(sizes.size()-1);
- for( int i=0;i<sizes.size()-1;i++){
- Omega[i] = std::vector < double > (sizes[i]*sizes[i+1]);
- for (int j=0;j<Omega[i].size();j++){Omega[i][j] = rand()/(double)RAND_MAX;}
- }
- B = std::vector< std::vector< double > >(sizes.size()-1);
- for( int i=0;i<sizes.size()-1;i++){
- B[i] = std::vector < double > (sizes[i+1]);
- for (int j=0;j<B[i].size();j++){B[i][j] = rand()/(double)RAND_MAX;}
- }
- return;
- }
- NeuralNetwork::NeuralNetwork(){
- sizes = std::vector<int>();
- neuronestates = std::vector< std::vector< double > >();
- Omega = std::vector< std::vector< double > >();
- B = std::vector< std::vector< double > >();
- return;
- }
|
Ce code échoue à la compilation, en me renvoyant "undefined reference to `NeuralNetwork::NeuralNetwork(std::vector<int, std::allocator<int> >". J'ai d'abord creusé sur le code en lui-même, sans vraiment trouver de solution, et ai fini par demander à un ami de repasser dessus. Hors, chez lui, le code compile et tourne sans souci. Après répétition de l'expérience chez quelqu'un d'autre, de nouveau le code fonctionne.
Le message d'erreur sous-entends que je fais appel à un objet que j'ai pourtant pas l'impression d'appeler (enfin... je ne vois pas ce que le std::allocator<int> vient faire ici), et le problème semble venir de mon poste. Est-ce que ça serait un des réglages du compilateur ou de l'IDE (j'utilise CodeBlocks sous Windows)? J'avoue ma totale incompétence sur ces sujets... Si quelqu'un a une idée de l'origine du problème, je suis preneur de tout conseil ou astuce!
Merci d'avance