Je suis embêté par trois classe qui dépendent les unes des autres et qui utilisent les Templates afin de pouvoir spécifier différents types d'allocateurs mémoire:
template<typename _Alloc = std::allocator<Receiver*>>
class Neuron;
template<typename _Alloc = std::allocator<Receiver*>>
class Axon;
class Receiver
{
Receiver(Neuron &neuron, Axon& ax) { ... }
}
template<typename _Alloc>
class Axon
{
std::vector<Receiver*, _Alloc> m_receivers:
}
template<typename _Alloc>
class Neuron
{
Axon<_Alloc> m_axon;
}
Le problème ici est que bien évidemment le constructeur de la classe Receiver devrait être Receiver(Neuron<_Alloc> &neuron, Axon<_Alloc>& ax) { ... }, sauf que je n'arrive pas à trouver la déclaration de classe adaptée pour faire cela, étant donné que la classe Receiver fait partie de la Template... Quelqu'un aurait-il une solution ?
Neuron et Axon ne sont pas des classes, ce sont des templates de classe, ce ne sont donc pas des types et ne peuvent pas être paramètres de fonction. Il faut définir la class Receiver comme template ou à minima le constructeur comme tel.
class Receiver
{
template<typename A1,typename A2> // Seul le constructeur est template
Receiver( Neuron<A1>& neuron, Axon<A2>& ax ) { ... }
};
// ou bien c'est toute la classe qui dépend des 2 allocators
template<typename A1,typename A2> // toute la classe est template et dépend des 2 allocateurs
class Receiver
{
Receiver( Neuron<A1>& neuron, Axon<A2>& ax ) { ... }
};
J'ai bien compris que l'allocateur voulu devait apparaître comme argument Template dans la classe Receiver (C'est la solution 2 d'ailleurs car la classe contient plusieurs membres Axon et Neuron), mais mon problème c'est faire les déclarations. En effet, si j'utilise :
template<typename A1,typename A2> // toute la classe est template et dépend des 2 allocateurs
class Receiver
{
Receiver( Neuron<A1>& neuron, Axon<A2>& ax ) { ... }
};
Alors les déclarations :
template <typename A1, typename A2>
class Receiver;
template<typename _Alloc = std::allocator<Receiver<_Alloc, _Alloc>*>>
class Neuron;
template<typename _Alloc = std::allocator<Receiver<_Alloc, _Alloc>*>>
class Axon;
Ne sont pas valides. Comment déclarer cela ?
- Edité par parcoursupdedicated 22 août 2021 à 18:55:23
Il faudrait préciser l'erreur que tu obtiens. Seule obligation; tu ne peux pas mettre la définition de Receiver avant la déclaration de Axon et Neuron car Receiver en à besoin, le chronologie doit être :
template<typename _Alloc = std::allocator<Receiver<_Alloc, _Alloc>*>>
class Neuron;
template<typename _Alloc = std::allocator<Receiver<_Alloc, _Alloc>*>>
class Axon;
// Puis
template<typename A1,typename A2> // toute la classe est template et dépend des 2 allocateurs
class Receiver
{
Receiver( Neuron<A1>& neuron, Axon<A2>& ax ) { ... }
};
Les définitions de Neuron et Axon doivent être après leur déclaration (car la déclaration indique une valeur par défaut), et toutes les définitions et déclarations doivent être visibles donc dans un fichier d'entête.
Après Receiver (synapse.h) n'est pas défini dans le même fichier .h que Axon et Neuron (neuron.h), mais la déclaration avant de Neuron et Axon est faite dans synapse.h qui est inclu dans neuron.h... (Je peux poster tout le code si ça peut aider)
Personne n'a de solutions ? Je n'arrive toujours pas à compiler mon code...
Serpent (Ou plutôt Template) qui se mord la queue
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
En recherche d'emploi.
En recherche d'emploi.