Recibí el siguiente error al compilar un proyecto de iPhone. ¿Alguien sabe cómo puedo solucionarlo? "vtable para oned :: MultiFormatUPCEANReader", hace referencia a partir de: $ __ZTVN4oned23MultiFormatUPCEANReaderE non_lazy_ptr en MultiFormatUPCEANReader.o ld: Símbolo (s) que no se encuentra collect2: ld devolvió 1 Estado de salidavtable for ... al que se hace referencia desde el error de compilación xcode
Respuesta
El problema parecía ser que en el class MultiFormatUPCEANReader Había declarado un constructor y un destructor, pero no había escrito un cuerpo para el destructor, esto causaba este molesto problema. Espero que esto ayude a alguien a resolver su error de compilación. ¡Este es un terrible error de compilación con poca información!
Genéricamente, este es el problema de vtable faltante: C++ FAQ Lite 23.10.
Desde el Archivo de Internet: puede ocurrir
If you get a link error of the form "Error: Unresolved or undefined symbols detected: virtual table for class Fred," you probably have an undefined virtual member function in class Fred.
The compiler typically creates a magical data structure called the "virtual table" for classes that have virtual functions (this is how it handles dynamic binding). Normally you don't have to know about it at all. But if you forget to define a virtual function for class Fred, you will sometimes get this linker error.
Here's the nitty gritty: Many compilers put this magical "virtual table" in the compilation unit that defines the first non-inline virtual function in the class. Thus if the first non-inline virtual function in Fred is wilma(), the compiler will put Fred's virtual table in the same compilation unit where it sees Fred::wilma(). Unfortunately if you accidentally forget to define Fred::wilma(), rather than getting a Fred::wilma() is undefined, you may get a "Fred's virtual table is undefined". Sad but true.
El mismo error cuando uno se olvida de poner el nombre de clase frente a la definición de un método en el archivo CPP - como el que acabo de hacer. Y no es una cosa xcode, estoy usando cmake para compilar y gcc como compilador (como suele ser el caso de xcode).
Tienes toda la razón – WINSergey
Para mí fue una cosa de XCode, ya que tengo el mismo proyecto compilando bien.
En mi archivo Foo.h tuve constructor y destructor que se implementa en el archivo .cpp. Pero también tuve otra clase que tuve en Foo.h cuya implementación fue en Foo.h y no en .cpp. Así que tuve que agregar el archivo Foo.h en el proyecto XCode -> Objetivos -> "NombreTraje" -> BuildSources y este problema fue resuelto.
Espero que esto ayude.
hoy en día se llama "compilar fuentes" pero funcionó perfectamente para mí! – Mrlenny
En mi caso fue un método definido puro virtual en una clase base que fue declarado pero no se implementa en una clase derivada (y más específicamente el primer método virtual en el vtable), por ejemplo:
class Base
{
public:
virtual int foo() = 0;
virtual int bar() = 0;
};
class Derived : public Base
{
public:
Derived() {}
~Derived() {}
virtual int foo(); // <-- causes this obscure linker error
virtual int bar() {return 0;}
};
- 1. No se pudo encontrar el método XXX, al que se hace referencia desde el método YYY
- 2. El proyecto al que se hace referencia se "pierde" en Tiempo de compilación
- 3. WSDLException: Se produjo un error al intentar resolver el esquema al que se hace referencia en
- 4. error: "" _ OBJC_METACLASS _ $ _ CDVViewController ", a la que se hace referencia desde:" en Xcode4.3
- 5. Error CS1705: "que tiene una versión más alta que el ensamblado al que se hace referencia"
- 6. Símbolos indefinidos "vtable for ..." and "typeinfo for ..."?
- 7. referencia indefinida a `vtable para MainWindow 'error
- 8. error de compilación cuando se hace referencia a una biblioteca que usa maven
- 9. referencia indefinida a VTABLE para ...
- 10. Cómo resolver el error de "_OBJC_CLASS _ $ _ PLCrashReport", al que se hace referencia en iphone
- 11. C++ referencia indefinida a vtable
- 12. Qt Enlazador de error: "referencia indefinida a VTABLE"
- 13. C++ - Referencia Indefinido a `vtable
- 14. El componente al que se hace referencia 'EntityFramework' no se pudo encontrar.
- 15. “_OBJC_CLASS _ $ _”, se hace referencia a partir de: error en Xcode 4.3.2
- 16. Error de compilación al intentar usar CAGradientLayer
- 17. El tipo 'System.IDisposable' se define en un ensamblaje al que no se hace referencia
- 18. recibiendo el siguiente error de compilación: "el tipo {---} no se puede resolver que se hace referencia indirectamente a partir de los archivos necesarios .class"
- 19. Error al compilar el proyecto Xcode (iPhone)
- 20. referencia indefinida a `vtable para una plantilla
- 21. Error de compilación de símbolo duplicado en el proyecto XCode
- 22. guión fsx que hace referencia a un dll que hace referencia a muchos dll
- 23. El mensaje de registro que hace referencia al Gatekeeper aparece ocasionalmente cuando se ejecuta el simulador
- 24. Error de compilación Xcode ProcessPCH iPhone Simulator
- 25. Mensaje de error del validador personalizado de ASP.NET: el control al que hace referencia la propiedad no se puede validar
- 26. variable 'x' del tipo 'Producto' al que se hace referencia desde el alcance, pero no está definido
- 27. WCF Error: no se pudo encontrar el elemento de punto final predeterminado que hace referencia al contrato 'UserService.UserService'
- 28. Adición de frascos que se hace referencia a Android build.xml
- 29. Cómo adjuntar fuentes al ensamblado al que se hace referencia en Visual Studio
- 30. Incluya el archivo .config del proyecto al que se hace referencia
I de acuerdo, terrible mensaje de error. Tenía esto porque no hay implementación de método virtual en la clase base. – Nick
Gracias por responder esta pregunta: viene como el primer resultado de google para "vtable para hacer referencia a", me ha ahorrado mucho tiempo. – noamtm
¡Amigo eres un salvavidas! – cyclotrojan