Bonjour,

Je suis bloqué dans la réalisation d'un TP.

Voici le contexte, j'ai 2 classes : Core et MapReduce.

Je chercher à avoir vecteur de pointeurs de Core statique qui contiendra 4 instances de Core dans MapReduce.

Voici le main :

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
 
#include <iostream>
 
#include "Core.cpp"
#include "MapReduce.cpp"
 
int main(int argc, char **argv) {
 
    std::vector<int> b = std::vector<int>({12, 3, 100, 60, -7, -8, -9, -10});
 
    MapReduce<int> mri(&b);
 
    // 0- Affichage du nombre de coeurs initiaux
    std::cout << std::endl << "####### test 0 #######" << std::endl;
    std::cout << std::endl << "Nombre de coeurs initiaux: " << Core<int>::getCount() << std::endl;
 
    //1- Décommentez pour tester si on peut instancier un nouveau coeur (ne doit pas fonctionnerer)
    //Core<int> core1;
 
    //2 - Test d'affichage des coeurs disponibles (id s'incrémente et degradation 0)
    std::cout << std::endl << "####### test 2 #######" << std::endl << std::endl;
    MapReduce<int>::afficherCores();
 
    return 0;
}
Core.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
 
#ifndef CORE
#define CORE
 
#include <vector>
#include <iostream>
 
template<typename T>
class Core {
private:
    static int counter;
    static int identifiant;
    const int id;
    int degradation;
    std::vector<T> *values;
    Core(): id(++identifiant) {
        degradation = 0;
        ++counter;
    }
public:
    static int getCount(){
        return counter;
    }
    int getID(){
        return id;
    }
    int getDE(){
        return degradation;
    }
};
 
#endif
Core.cpp :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
#include "Core.hpp"
 
template<typename T>
int Core<T>::identifiant = 0;
 
template<typename T>
int Core<T>::counter = 0;
MapReduce.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
40
 
#ifndef MAPREDUCE
#define MAPREDUCE
 
 
#include <vector>
#include <iostream>
 
#include "Core.hpp"
 
template<typename T>
 
class MapReduce {
private:
    const static std::vector<Core<T> *> cores{
            cores.push_back(Core<T>{}),
            cores.push_back(Core<T>{}),
            cores.push_back(Core<T>{}),
            cores.push_back(Core<T>{})
    };
    std::vector<Core<T>> *values;
    Core<T> * core;
public:
    explicit MapReduce(std::vector<int> *pVector){
        for (const std::vector<Core<T> *> &item : cores) {
            // erreur : In template: reference to type 'const std::vector<Core<int> *>' could not bind to an lvalue of type 'Core<int> *const'
        }
    }
 
    static void afficherCores(){
        for(int i = 0; i < cores.size(); i++){
            std::cout << "id : " << cores.at(i)->getID() << std::endl;
 
            // erreur : In template: no matching member function for call to 'push_back'
        }
    }
};
 
 
#endif
J'obtiens les deux erreurs ci-dessus, du coup impossible d'instancier mes core et d'obtenir le resultat de getcount() et afficherCores().

J’espère que vous pourrez m'aider, merci par avance.