我的代码存在问题,我并不理解。
我使用的是«gcc 4.7.2版(Ubuntu / Linaro 4.7.2-2ubuntu1)»
编辑:我用这一行编译
g++ -g -std=c++0x -o "GeneticEngine.o" -c "GeneticEngine.cpp"
以下是我遇到的错误:
GeneticEngine.tpl:16:5: erreur: parenthesized initializer in array new [-fpermissive]
这是我的(最小化)代码:
GeneticEngine.hpp
#include "GeneticThread.hpp"
template <class T>
class GeneticEngine
{
public:
template <typename ... Args>
GeneticEngine(int nb_threads,float taux_mut,int tranche_mut,std::string filename,int pop_size,Args& ... args);
/* Other code */
private:
GeneticThread<T>* islands; /* Cause of error */
int size;
};
#include "GeneticEngine.tpl"
GeneticEngine.tpl
template <class T>
template <typename ... Args>
GeneticEngine<T>::GeneticEngine(int nb_threads,float taux_mut,int tranche_mut,std::string filename,int pop_size,Args& ... args) : size(nb_threads)
{
/*next line is 16 : Error */
islands = new GeneticThread<T>[size](taux_mut,tranche_mut,filename,pop_size/nb_threads,std::forward<Args>(args)...);
};
GeneticThread.hpp
template <class T>
class GeneticThread
{
public:
template <typename ... Args>
GeneticThread(float taux_mut,int tranche_mut,std::string filename,int pop_size,Args& ... args)
{ /* code ... */ };
/* Other code */
};
我已经读过这个(Initializing arrays when using templates),但它并不完全一样。
如果您有一个想法,但没有:[最后我用这个:/]
GeneticThread<T>** islands;
islands = new GeneticThread<T>*[size];
for(int i=0;i<size;++i)
islands[i] = new GeneticThread<T>(taux_mut,tranche_mut,filename,pop_size/nb_threads,std::forward<Args>(args)...);
我希望:
GeneticThread<T>* islands;
有办法吗?
我试试:
islands = new (GeneticThread<T>[size](taux_mut,tranche_mut,filename,pop_size/nb_threads,std::forward<Args>(args)...));
和
islands = new GeneticThread<T>(taux_mut,tranche_mut,filename,pop_size/nb_threads,std::forward<Args>(args)...)[size];
但它不起作用。
感谢。
答案 0 :(得分:2)
您不能为new
分配的数组使用非默认构造函数。
不要像这样使用new
,而是使用vector
并将正确构造的对象传递给vector
构造函数!即使您永远不需要调整大小,vector
也会确保您的内存得到妥善管理而不会泄露。
例如:
std::vector<GeneticThread<T>*> islands;
然后:
GeneticEngine<T>::GeneticEngine(int nb_threads,float taux_mut,int tranche_mut,std::string filename,int pop_size,Args& ... args)
: size(nb_threads), islands(size, GeneticThread<T>(taux_mut,tranche_mut,filename,pop_size/nb_threads,std::forward<Args>(args)...))
{
};