compilador de C ++ LNK2001 error error: símbolo externo sin resolver

compilador de C ++ LNK2001 error error: símbolo externo sin resolver

Este error es muy confuso, por lo general llevó a una función o una variable sin resolver.
Si es variable, en general, las variables miembro estáticas static typename xxxsin inicialización se utilizan (si los datos no son miembros de la clase vs se quejan).
La razón es que si se acaba de declarar una variable estática y sin inicialización , el compilador es no una variable estática para la asignación de espacio , sólo cuando la inicialización de variables estáticas después de que el compilador le dará esta variable se le asigna un área estática de espacio de memoria , por lo que el programa a encontrar esta variable en el área de datos y continuar su uso.
Si se trata de una función, la situación que me encontré en la actualidad son los siguientes:
1), además de manifestar la función, pero no ha finalizado la definición;
2) se ha reunido hoy, llamar a la clase derivada, la clase base sin funciones virtuales completar la definición de vida.

//Declaration.h
class myExc 
	{
	protected:
		double a;
		double b;
	public:
		myExc() :logic_error(""){}
		virtual void show();
	};
	
	class bad_gmean :myExc
	{
	public:
		bad_gmean(){}
		void show(){ cout << "gmean( " << a << " , " << b << " ): invalid arguments: a < 0 or b < 0\n"; }
	};

	class bad_hmean :myExc
	{
	public:
		bad_hmean(){}
		void show(){ cout << "hmean( " << a << " , " << b << " ): invalid arguments: a = -b\n"; }
	};

La figura puede verse que una clase derivada anula la clase base void show()función, pero la clase base void show()no está definida inline.

//main.cpp
/*
...
*/
catch (myExc &b)
		{
			b.show();
			cout << "Exception type: " << typeid(b).name() << endl;
			cout << "Try again.\n";
			continue;
		}
/*
...
*/
		

La figura se puede ver que la función principal, tenemos que llamar a la clase derivada a modo de referencia a la clase base show()función , aunque no utilizar directamente la clase base show(), sin embargo, utilizar la referencia clase base en la clase derivada llamar a una función de la forma en que pertenece a la dinámica de unión , se completa cuando el programa se está ejecutando, y en la fase de compilación del programa , el compilador todavía creo que llamar a la clase base de show()la función , y por lo tanto el error.
Modificaciones es muy simple, para asegurarse de que no hay ninguna llamada a la premisa de los métodos de la clase base , la función en línea directa define la clase base show():

virtual void show() {}

O función virtual pura es una función, la clase base correspondiente se transforma en una clase base abstracta:

virtual void show() = 0

Para utilizar el programa de clase base de otras operaciones completas, usted tiene que demostrar una función correspondiente en la definición de la clase base.

Publicado 16 artículos originales · ganado elogios 10 · vistas 4924

Supongo que te gusta

Origin blog.csdn.net/weixin_44826484/article/details/104300070
Recomendado
Clasificación