trenmisaka
tengo 2 clases:
class base {
virtual void foo() {};
};
class derived : public base {
void foo() { base::foo(); }
};
me equivoque y escribi base:foo();
en vez de base::foo();
. El código fue compilado y ejecutado, pero con errores de segmento.
No sé cómo puedo buscarlo en Google y no sé qué es, pero estoy muy interesado: ¿qué significa eso?
base:foo();
Si es importante:
class base : public QAbstractGraphicsShapeItem
void foo() { base:foo(); }
es equivalente a:
void foo()
{
base: // An unused label.
foo(); // Calls the function again, resulting in infinite recursion.
}
Debido a la recursividad infinita, la función provoca un desbordamiento de pila.
-
si, me encontre con ese error cuando vi muchas llamadas de
foo()
en la pila de llamadas. Gracias– Railmisaka
22 de mayo de 2015 a las 3:32
-
¿Hay advertencias para esto disponibles en gcc/clang, etc.?
– tontería
22 de mayo de 2015 a las 6:27
-
@Serthy, cuando uso
-Wall
me sale el mensaje de advertencia: socc.cc:3:4: advertencia: etiqueta ‘base’ definida pero no utilizada [-Wunused-label] base: // Una etiqueta sin usar.– R Sahu
22 de mayo de 2015 a las 6:55
-
@Serthy: IIRC Visual Studio tiene la advertencia “recursivo en todas las rutas de control” para esto.
– MSalters
22 de mayo de 2015 a las 9:57
Es un etiqueta.
– chris
22 de mayo de 2015 a las 2:33
Este es un caso en el que activar las advertencias ayuda, consulte vive …
warning: label 'base' defined but not used [-Wunused-label]
… tal vez necesitemos agregar esta página de preguntas: ¿Has probado a activar las advertencias?– Shafik Yaghmour
22 de mayo de 2015 a las 2:36
Eso terminó con un desbordamiento de pila. ¡Qué apropiado!
– Laurent LA RIZZA
11 de junio de 2015 a las 12:37