Ahh, C++ plantillas ...¿Cuál es el significado de este error 'falta de plantilla argumentos' C++
The code I see,
makes sense to me,
but GCC...
it disagrees.
El código siguiente se compila y se ejecuta como se esperaba, pero si se elimina el comentario de que #define
, se obtiene el error que no entiendo El símbolo iterator
todavía tiene una sola cosa a la que puede hacer referencia: typedef en la superclase. Así que supongo que tengo dos preguntas: 1. ¿Qué significan los errores? 2. ¿Cuál es la mejor manera de solucionarlos?
#include <map>
#include <string>
#include <cstdio>
using namespace std;
// #define WITH_TEMPLATE 1
#ifdef WITH_TEMPLATE
template <class C>
struct MyClass : public map<string, C>
#else
struct MyClass : public map<string, int>
#endif
{
bool haskey(const string &s)
{
iterator it = find(s);
return (it != end());
}
};
int main()
{
#ifdef WITH_TEMPLATE
MyClass<int> m;
#else
MyClass m;
#endif
m["test"] = 10;
printf("%d %d\n", m.haskey("test"), m.haskey("no"));
}
errores de GCC:
temp.cc: In member function ‘bool MyClass::haskey(const std::string&)’:
temp.cc:18: error: missing template arguments before ‘it’
temp.cc:18: error: expected `;' before ‘it’
temp.cc:19: error: ‘it’ was not declared in this scope
temp.cc:19: error: there are no arguments to ‘end’ that depend on a template parameter, so a declaration of ‘end’ must be available
temp.cc:19: error: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
¿Ha intentado string :: iterador? – Lordalcol