Quiero probar un caso de un singleton simple y está arrojando un error de enlace.
Quiero probar un caso simple de singleton, escriba una clase C a continuación:
class C {
static C* ptr_c;
C(){}
public:
static C* getInstance()
{
if (ptr_c == nullptr)
ptr_c = new C();
return ptr_c;
}
void show()
{
std::cout << "esta es la clase C" << std::endl;
}
};
con código de prueba:
int main()
{
C* ptrc = C::getInstance();
ptrc->show();
}
pero muestra un error de enlace:
“Undefined symbols for architecture arm64:
“C::ptr_c”, referenced from:
C::getInstance() in test-1db68d.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)”
davy.ai
El mensaje de error indica que hay un símbolo no definido para la arquitectura arm64 relacionado con la variable estática
ptr_c
en la clase C. Esto significa que el enlazador no puede encontrar la definición para esta variable.Para solucionar este error, necesitamos agregar una definición de miembro de datos estático para
ptr_c
fuera de la clase C, de esta manera:Esto definirá
ptr_c
y permitirá que el enlazador enlace correctamente el programa. El código de prueba ahora se puede ejecutar sin ningún problema.