Search code examples
c++templatesgcc

Cygwin gcc compiler problems with template instantiation using GAlib


all, I am using Cygwin gcc 4.8.1 with Netbeans 7.3.1 on Win 7 pro x64. I tried to build the GAlib project but encounter the template instantiation issues:

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

I also defined NO_AUTO_INST in the gaconfig.h, but the errors persists. So how to fix this problem?


Solution

  • you want

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

    to be

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

    I compiled galib (http://lancet.mit.edu/ga/dist/galib247.tgz) and it stopped on the ex17.C compile also, using g++ version 4.8.1 as well. Cygwin is like linux for tools right, so in toplevel source directory is the file makevars (not makevars.bcc nor makevars.vcpp). In makevars, change the already uncommented line following

    # gcc3, gcc4
    #
    #
    CXXFLAGS    = -g -Wall
    

    to

    CXXFLAGS    = -g -fpermissive -Wall
    

    You might not be running X in cygwin, but I also put this in the examples/graphic/makefile and changed the wigdet set to be athena there too, and installed the libxaw7-dev package for the widget headers