ich ein sehr einfaches Testprogramm wie unten haben:C++: Warum kann mit der Vorlage nicht sowohl der Container- als auch der Elementtyp abgeleitet werden?
#include<vector>
#include<iostream>
using namespace std;
template<typename C, typename E>
void f(const C<E>& container){
cout<<container.size()<<endl;
}
int main(){
vector<int> i;
f(i);
return 0;
}
Es scheitert mit gcc 4.1.2 zu kompilieren. Fehlermeldung lautet:
templateContainer.cpp:5: error: ‘C’ is not a template
templateContainer.cpp: In function ‘int main()’:
templateContainer.cpp:10: error: no matching function for call to ‘f(std::vector<int, std::allocator<int> >&)’
Aus diesem Grund haben Container einen * zugeordneten Typ *. Du brauchst kein 'E'; Schreiben Sie einfach 'typename C :: value_type' (oder' typename C :: reference_type', wie passend). –
Zur Verdeutlichung, die Fehlermeldung ist, weil 'C ** ist definiert ** als der Name eines Typs (' typename C '), aber es ist ** verwendet ** als der Name einer Vorlage ('C') . Es kann nicht beides sein. –