使用GAlib进行模板实例化的Cygwin gcc编译器问题

时间:2013-09-16 22:43:42

标签: c++ templates gcc compiler-construction

所有,我在Win 7 pro x64上使用Cygwin gcc 4.8.1和Netbeans 7.3.1。我尝试构建GAlib项目但遇到模板实例化问题:

g++ -g -Wall -I.. -c ex17.C
../ga/GA2DArrayGenome.C: In instantiation of ‘GA2DArrayAlleleGenome<T>::GA2DArrayAlleleGenome(unsigned int, unsigned int, const GAAlleleSet<T>&, GAGenome::Evaluator, void*) [with T = int; GAGenome::Evaluator = float (*)(GAGenome&)]’:
In file included from ../ga/GA2DArrayGenome.h:150:0,
             from ../ga/ga.h:168,
             from ex17.C:13:
ex17.C:45:63:   required from here
../ga/GA2DArrayGenome.C:272:75: error: ‘initializer’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
initializer(GA2DArrayAlleleGenome<T>::DEFAULT_2DARRAY_ALLELE_INITIALIZER);
                                                                       ^
../ga/GA2DArrayGenome.C:272:75: note: declarations in dependent base ‘GAGenome’ are not found by unqualified lookup
../ga/GA2DArrayGenome.C:272:75: note: use ‘this->initializer’ instead
../ga/GA2DArrayGenome.C:273:67: error: ‘mutator’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
mutator(GA2DArrayAlleleGenome<T>::DEFAULT_2DARRAY_ALLELE_MUTATOR);
                                                               ^
../ga/GA2DArrayGenome.C:273:67: note: declarations in dependent base ‘GAGenome’ are not found by unqualified lookup
../ga/GA2DArrayGenome.C:273:67: note: use ‘this->mutator’ instead
../ga/GA2DArrayGenome.C:274:73: error: ‘comparator’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
comparator(GA2DArrayAlleleGenome<T>::DEFAULT_2DARRAY_ALLELE_COMPARATOR);
                                                                     ^
../ga/GA2DArrayGenome.C:274:73: note: declarations in dependent base ‘GAGenome’ are not found by unqualified lookup
../ga/GA2DArrayGenome.C:274:73: note: use ‘this->comparator’ instead
../ga/GA2DArrayGenome.C:275:71: error: ‘crossover’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
crossover(GA2DArrayAlleleGenome<T>::DEFAULT_2DARRAY_ALLELE_CROSSOVER);
                                                                   ^
../ga/GA2DArrayGenome.C:275:71: note: declarations in dependent base ‘GAGenome’ are not found by unqualified lookup
../ga/GA2DArrayGenome.C:275:71: note: use ‘this->crossover’ instead
../ga/GA2DArrayGenome.C: In instantiation of ‘GA2DArrayAlleleGenome<T>::GA2DArrayAlleleGenome(unsigned int, unsigned int, const GAAlleleSetArray<T>&, GAGenome::Evaluator, void*) [with T = int; GAGenome::Evaluator = float (*)(GAGenome&)]’:
ex17.C:138:28:   required from here
../ga/GA2DArrayGenome.C:289:75: error: ‘initializer’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
initializer(GA2DArrayAlleleGenome<T>::DEFAULT_2DARRAY_ALLELE_INITIALIZER);
                                                                       ^
../ga/GA2DArrayGenome.C:289:75: note: declarations in dependent base ‘GAGenome’ are not found by unqualified lookup
../ga/GA2DArrayGenome.C:289:75: note: use ‘this->initializer’ instead
../ga/GA2DArrayGenome.C:290:67: error: ‘mutator’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
mutator(GA2DArrayAlleleGenome<T>::DEFAULT_2DARRAY_ALLELE_MUTATOR);
                                                               ^
../ga/GA2DArrayGenome.C:290:67: note: declarations in dependent base ‘GAGenome’ are not found by unqualified lookup
../ga/GA2DArrayGenome.C:290:67: note: use ‘this->mutator’ instead
../ga/GA2DArrayGenome.C:291:73: error: ‘comparator’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
comparator(GA2DArrayAlleleGenome<T>::DEFAULT_2DARRAY_ALLELE_COMPARATOR);
                                                                     ^
../ga/GA2DArrayGenome.C:291:73: note: declarations in dependent base ‘GAGenome’ are not found by unqualified lookup
../ga/GA2DArrayGenome.C:291:73: note: use ‘this->comparator’ instead
../ga/GA2DArrayGenome.C:292:71: error: ‘crossover’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
crossover(GA2DArrayAlleleGenome<T>::DEFAULT_2DARRAY_ALLELE_CROSSOVER);
                                                                   ^
../ga/GA2DArrayGenome.C:292:71: note: declarations in dependent base ‘GAGenome’ are not found by unqualified lookup
../ga/GA2DArrayGenome.C:292:71: note: use ‘this->crossover’ instead
makefile:27: recipe for target `ex17.o' failed
make[1]: *** [ex17.o] Error 1
make[1]: Leaving directory `/cygdrive/c/Users/Daiyue/Documents/NetBeansProjects/galib247/examples'
Makefile:19: recipe for target `ex' failed
make: *** [ex] Error 2

我还在gaconfig.h中定义了NO_AUTO_INST,但错误仍然存​​在。那么如何解决这个问题?

欢呼声

1 个答案:

答案 0 :(得分:3)

你想要

g++ -g -Wall -I.. -c ex17.C

g++ -g -fpermissive -Wall -I.. -c ex17.C

我编译了galib(http://lancet.mit.edu/ga/dist/galib247.tgz),它也在ex17.C编译中停止,也使用g ++版本4.8.1。 Cygwin就像linux一样工具,所以在toplevel源目录中是makevars文件(不是makevars.bcc,也不是makevars.vcpp)。在makevars中,更改

之后已经取消注释的行
# gcc3, gcc4
#
#
CXXFLAGS    = -g -Wall

CXXFLAGS    = -g -fpermissive -Wall

您可能没有在cygwin中运行X,但我也将它放在examples / graphic / makefile中,并将wigdet设置为athena,并为widget标题安装了libxaw7-dev软件包