A
aaragon
Hi everyone,
I was unable to find out why my code is not compiling. I have a
template class and I'm trying to write the operator<< for standard
output. Does anyone know why this is not right? The code is as
follows...
// main class:
template <
class Individual,
class SelectionPolicy,
class Population : public SelectionPolicy, public
CrossOverPolicy<Individual> {
// member variables and functions
// friend declaration for standard output
template <class I,class Se,template <class> class C,class St>
friend ostream& operator<<(ostream& os, Population<I,Se,C,St>& pop);
};
// operator<< definition
template <class Individual,class SelectionPolicy,template <class>
class CrossOverPolicy,class StoragePolicy>
ostream& operator<<(ostream& os,
Population<Individual,SelectionPolicy,CrossOverPolicy,StoragePolicy>&
pop) {
os<<"pop"<<endl;
return os;
}
// main function
int main(){
typedef Population<ind, t > pop;
pop ccc(10);
cout<<ccc<<endl;
return 0;
}
The compiler error message is:
main.cxx:104: error: ambiguous overload for 'operator<<' in 'std::cout
<< ccc'
gaPopulation.h:411: note: candidates are: std:stream&
operator<<(std:stream&, Population<I, Se, C, St>&) [with I =
Individual<Chromosome<Objective<1u, Optimizator<minimize> >,
BitSetPolicy, 2>, ClockMutator>, Se = TournamentSelector<2>, C =
OnePointX, St = VectorPolicy<Individual<Chromosome<Objective<1u,
Optimizator<minimize> >, BitSetPolicy, 2>, ClockMutator> >, Individual
= Individual<Chromosome<Objective<1u, Optimizator<minimize> >,
BitSetPolicy, 2>, ClockMutator>, SelectionPolicy =
operator<<(std:stream&, Population<Individual, SelectionPolicy,
CrossOverPolicy, StoragePolicy>&) [with Individual =
Individual<Chromosome<Objective<1u, Optimizator<minimize> >,
BitSetPolicy, 2>, ClockMutator>, SelectionPolicy =
Thank you,
a^2
I was unable to find out why my code is not compiling. I have a
template class and I'm trying to write the operator<< for standard
output. Does anyone know why this is not right? The code is as
follows...
// main class:
template <
class Individual,
class SelectionPolicy,
class Population : public SelectionPolicy, public
CrossOverPolicy<Individual> {
// member variables and functions
// friend declaration for standard output
template <class I,class Se,template <class> class C,class St>
friend ostream& operator<<(ostream& os, Population<I,Se,C,St>& pop);
};
// operator<< definition
template <class Individual,class SelectionPolicy,template <class>
class CrossOverPolicy,class StoragePolicy>
ostream& operator<<(ostream& os,
Population<Individual,SelectionPolicy,CrossOverPolicy,StoragePolicy>&
pop) {
os<<"pop"<<endl;
return os;
}
// main function
int main(){
typedef Population<ind, t > pop;
pop ccc(10);
cout<<ccc<<endl;
return 0;
}
The compiler error message is:
main.cxx:104: error: ambiguous overload for 'operator<<' in 'std::cout
<< ccc'
gaPopulation.h:411: note: candidates are: std:stream&
operator<<(std:stream&, Population<I, Se, C, St>&) [with I =
Individual<Chromosome<Objective<1u, Optimizator<minimize> >,
BitSetPolicy, 2>, ClockMutator>, Se = TournamentSelector<2>, C =
OnePointX, St = VectorPolicy<Individual<Chromosome<Objective<1u,
Optimizator<minimize> >, BitSetPolicy, 2>, ClockMutator> >, Individual
= Individual<Chromosome<Objective<1u, Optimizator<minimize> >,
BitSetPolicy, 2>, ClockMutator>, SelectionPolicy =
gaPopulation.h:441: note: std:stream&CrossOverPolicy = OnePointX said:, BitSetPolicy, 2>, ClockMutator> >]
operator<<(std:stream&, Population<Individual, SelectionPolicy,
CrossOverPolicy, StoragePolicy>&) [with Individual =
Individual<Chromosome<Objective<1u, Optimizator<minimize> >,
BitSetPolicy, 2>, ClockMutator>, SelectionPolicy =
make[2]: *** [main.o] Error 1CrossOverPolicy = OnePointX said:, BitSetPolicy, 2>, ClockMutator> >]
Thank you,
a^2