¿Que significa?

1 minuto de lectura

avatar de usuario
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

  • 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 vivewarning: 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

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 -Wallme 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

¿Ha sido útil esta solución?