C ++コンパイラのエラーエラーLNK2001:未解決の外部シンボル

C ++コンパイラのエラーエラーLNK2001:未解決の外部シンボル

このエラーは、実際には通常、未解決のAの関数や変数にプロンプトが表示され、混乱しています。
それが変数の場合、一般的に静的メンバ変数static typename xxx(データは文句を言うでしょう、VSクラスのメンバーではない場合)、初期化せずに使用します。
その理由は、我々があればということであるだけで、初期化せずに静的変数を宣言し、コンパイラは、スペースの割り当てのための静的変数でないときにのみ、静的変数の初期化コンパイラの後には、なります。この変数を与えることは、メモリ空間の静的エリアを割り当てられているので、そのプログラムを、するデータ領域に、この変数を見つけると使用に進みます。
:それが関数の場合、現時点で遭遇した状況の私はある
)1機能のみを宣言しますが、定義を完了しませんでした。
今日会っ2)、生命の定義を完了していない仮想関数を持つ派生クラス、基本クラスを呼び出します。

//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"; }
	};

図は、派生クラスは、ベースクラスをオーバーライドすることが分かるvoid show()機能が、ベースクラスはvoid show()インラインで定義されていません。

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

図は、我々が持っている主な機能することがわかる基本クラスへの参照により派生クラスを呼び出すためshow()の機能を直接基本クラスを使用していないが、show()しかし、方法の機能を呼び出すために、派生クラスで基本クラスリファレンスを使用バインディング動的に属しプログラムが実行されている場合、終了し、プログラムのコンパイルフェーズでは、コンパイラは、基本クラスが呼び出すと思うshow()機能をので、エラー。
変更は、非常に単純である基底クラスのメソッドの前提への呼び出しことを保証するために、直接インライン関数は、基本クラスを定義していませんshow()

virtual void show() {}

純粋仮想関数が関数であるか、または、対応する基底クラスは抽象基底クラスに変換されます。

virtual void show() = 0

基底クラスのショーに完全に他の操作を使用するには、基本クラス定義の中で対応する機能を表示する必要があります。

おすすめ

転載: blog.csdn.net/weixin_44826484/article/details/104300070