Problème C++ shared_ptr
rickey91
-
Prof -
Prof -
Bonjour,
J'ai un souci en C++. Si quelqu'un peut m'aider.
J'ai en entrée des tableaux de double (xx, yy, zz) et j'essaye ensuite d'affecter les valeurs de mes tableaux à des vector (dVec1, dVec2, et dVec3) et je crée ensuite des shared_ptr de mes vector; Mais cela ne marche pas !!!
Voici le code :
__declspec(dllexport) void __cdecl justdoit(double xx[], double yy[], double zz[]){
std::vector<double> dVec1;
std::vector<double> dVec2;
std::vector<double> dVec3;
typedef std::vector<double> dVec;
for (int i=0;i<21; i++){
dVec1.push_back(xx[i]);
dVec2.push_back(yy[i]);
dVec3.push_back(zz[i]);
}
boost::shared_ptr<dVec> x_arr(std::vector(dVec1, 21));
boost::shared_ptr<dVec> y_arr(std::vector(dVec2, 21));
boost::shared_ptr<dVec> z_arr(std::vector(dVec3, 21));
et voici le message d'erreur obtenu :
Compiling...
justdoit.cpp
c:\user\U236436\work\Interfacage_MP\MOVB\justdoit\justdoit\justdoit.cpp(58) : error C2955: 'vector' : use of class template requires template argument list
c:\program files\microsoft visual studio\vc98\include\vector(244) : see declaration of 'vector'
c:\user\U236436\work\Interfacage_MP\MOVB\justdoit\justdoit\justdoit.cpp(58) : fatal error C1903: unable to recover from previous error(s); stopping compilation
Error executing cl.exe.
justdoit.obj - 2 error(s), 0 warning(s)
Merci d'avance pour votre aide.
J'ai un souci en C++. Si quelqu'un peut m'aider.
J'ai en entrée des tableaux de double (xx, yy, zz) et j'essaye ensuite d'affecter les valeurs de mes tableaux à des vector (dVec1, dVec2, et dVec3) et je crée ensuite des shared_ptr de mes vector; Mais cela ne marche pas !!!
Voici le code :
__declspec(dllexport) void __cdecl justdoit(double xx[], double yy[], double zz[]){
std::vector<double> dVec1;
std::vector<double> dVec2;
std::vector<double> dVec3;
typedef std::vector<double> dVec;
for (int i=0;i<21; i++){
dVec1.push_back(xx[i]);
dVec2.push_back(yy[i]);
dVec3.push_back(zz[i]);
}
boost::shared_ptr<dVec> x_arr(std::vector(dVec1, 21));
boost::shared_ptr<dVec> y_arr(std::vector(dVec2, 21));
boost::shared_ptr<dVec> z_arr(std::vector(dVec3, 21));
et voici le message d'erreur obtenu :
Compiling...
justdoit.cpp
c:\user\U236436\work\Interfacage_MP\MOVB\justdoit\justdoit\justdoit.cpp(58) : error C2955: 'vector' : use of class template requires template argument list
c:\program files\microsoft visual studio\vc98\include\vector(244) : see declaration of 'vector'
c:\user\U236436\work\Interfacage_MP\MOVB\justdoit\justdoit\justdoit.cpp(58) : fatal error C1903: unable to recover from previous error(s); stopping compilation
Error executing cl.exe.
justdoit.obj - 2 error(s), 0 warning(s)
Merci d'avance pour votre aide.
1 réponse
Bonjour,
L'erreur affichée provient probablement du fait que comme std::vector est une classe template, il faut obligatoirement spécifier son type template lors de la construction, comme ceci:
std::vector<double>( args... )
Il me semble également voir un autre problème ensuite sur les shared_ptr : tu dois passer au constructeur de shared_ptr un objet alloué dynamiquement avec new, comme ceci :
boost::shared_ptr<dVec> x_arr(new std::vector<double>(xx, xx + 21));
ainsi quand tu fera une copie ou une affectation du shared_ptr, le vecteur ne sera pas copié mais un compteur de références interne sera incrémenté, ce qui permet d'effectuer le delete automatiquement dès que le dernier shared_ptr est détruit (donc plus de risque de memory leak :))
J'espere que ça aura résolu ton problème.
Jonathan
L'erreur affichée provient probablement du fait que comme std::vector est une classe template, il faut obligatoirement spécifier son type template lors de la construction, comme ceci:
std::vector<double>( args... )
Il me semble également voir un autre problème ensuite sur les shared_ptr : tu dois passer au constructeur de shared_ptr un objet alloué dynamiquement avec new, comme ceci :
boost::shared_ptr<dVec> x_arr(new std::vector<double>(xx, xx + 21));
ainsi quand tu fera une copie ou une affectation du shared_ptr, le vecteur ne sera pas copié mais un compteur de références interne sera incrémenté, ce qui permet d'effectuer le delete automatiquement dès que le dernier shared_ptr est détruit (donc plus de risque de memory leak :))
J'espere que ça aura résolu ton problème.
Jonathan