"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué aparece el error \"Símbolo externo no resuelto\" al configurar un campo estático en C++?

¿Por qué aparece el error \"Símbolo externo no resuelto\" al configurar un campo estático en C++?

Publicado el 2024-11-09
Navegar:103

Why Am I Getting \

Símbolo externo no resuelto para el campo de objeto estático

Este artículo investiga el mensaje de error "error LNK2001: símbolo externo no resuelto" encontrado al intentar configurar un campo estático en una clase del método principal.

En el fragmento de código proporcionado, la declaración del campo estático "a" en la clase "B" ocurre dentro de la definición de la clase misma. Sin embargo, según el estándar C, dichas declaraciones no se consideran definiciones. Para los miembros de datos estáticos, la definición adecuada debe aparecer fuera de la clase en el ámbito del espacio de nombres adjunto, utilizando el operador "::".

La regla que rige este requisito se conoce como Regla de una definición (ODR). que exige que cada entidad (incluidos los miembros de datos estáticos) tenga una definición única en todo el programa. Esta regla garantiza que no haya ambigüedad con respecto al valor del miembro estático.

Por lo tanto, para resolver el error, se debe modificar el código de la siguiente manera, donde "a" se define en el alcance del espacio de nombres:

class A
{
public:
    A()
    {

    }
};

class B
{
public:
    static A* a;
};

A* B::a; // Definition in namespace scope

int main()
{
    B::a = new A;
}

Al definir explícitamente el miembro estático fuera de la clase, el vinculador puede resolver correctamente la referencia del símbolo y el código se compilará correctamente.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3