Voici le code compilable et le problème est toujours làpointeur modèle de classe
#include <iostream>
#include <string>
template<typename A,typename B,typename C>
class Mesh{
public:
Mesh(){}
Mesh(std::string file){
A foo;
std::cout << file << endl;
}
};
template<typename A, typename B,typename C>
class Eq{
public:
Mesh<A,B,C>* pmesh;
Eq() {}
Eq(Mesh<A,B,C> *pmesh_){
pmesh = pmesh_;
}
};
template<typename A, typename B,typename C>
class Pipe{
public:
Mesh<A, B,C> mesh;
Eq<A, B, C> eq1;
Pipe(){}
Pipe(std::string file){
mesh = Mesh<A, B, C>(file);
eq1 = Eq<A,B,C>(&mesh);
std::cout << "P:"<<&mesh << " ";
}
};
template<typename A,typename B, typename C>
class Simulator {
public:
Pipe<A,B,C> pipe;
Simulator(){}
Simulator(std::string file){
pipe = Pipe<A,B,C>(file);
std::cout << "S:"<<&(pipe.mesh)<<" ";
}
};
using namespace std;
int main() {
typedef double A;
typedef double B;
typedef int C;
Simulator< A, B, C> simu("mesh");
}
La sortie du programme est
maille T
P: 0018FE44 S: 0018FE3C
Je pense le problème est dans la déclaration de pipe, si je définis sinulator comme
template<typename A,typename B, typename C>
class Simulator {
public:
Pipe<A,B,C>* ppipe;
Simulator(){}
Simulator(std::string file){
ppipe = new Pipe<A,B,C>(file);
std::cout << "S:"<<&(ppipe->mesh)<<" ";
}
};
la sortie est
maille P: 00308F08 S: 00308F08
une idée, pourquoi le premier code est erroné ??
S'il vous plaît affiche le code où vous instanciez le (s) modèle (s). – Chubsdad
Et formatez-le correctement pendant que vous y êtes. – Job
+1: pour le guidage de format – Chubsdad