0

したがって、派生クラスOrderedListのヘッダーファイルでは、コンパイラに基本クラスメソッドを使用するように指示することで、以前に作成したListクラスの機能の一部を継承していusing List<DataType>::examplefunction;ます。オーバーライドされておらず、前述の方法で宣言されているすべての関数は、OrderedListのプライベートメンバーです。

したがって、プログラムを実行すると、MicrosoftVisualStudioで次のエラーが発生します。

エラーC2248:'OrderedList :: examplefunction':クラス'OrderedList'で宣言されたプライベートメンバーにアクセスできません

examplefunctionは、基本クラスListで公開されています。

これが私が取り組んでいるものの具体的な例です:

OrderedList.hでは、

private: 
using List<DataType>::remove;

List.hで、

public:
void remove () throw ( logic_error );

そして、removeがList.cppのどこにあるか、

void List<DataType>::remove () throw ( logic_error ) 
{ // Do some operations// 
}

また、OrderedListヘッダーファイルの宣言は次のようになります。

#include "List.cpp"

template < typename DataType, typename KeyType >
class OrderedList : public List<DataType>

誰かが私に問題を引き起こしているものを教えてくれるなら、それは大いにありがたいです。

4

2 に答える 2

1

exampleFunctionがListクラスでプライベートである場合、OrderedListクラスはそれにアクセスできません。代わりに保護してください。プライベートメンバーと保護されたメンバーを参照してください:C ++

于 2012-10-06T02:45:07.500 に答える
0

継承されたメソッドを public に移動し、データ メンバーを OrderedList ヘッダー ファイルで保護するように移動しました。

アップデート

それで、これは約1年前のことです。しかし、今では露骨に明らかなようです。base class( List)から継承されたメソッドを として宣言するように指示されましたprivatemain、テキストの作成者によって (テスト目的で) 継承されたメソッドの一部が呼び出されていました。で作成されprivateた のインスタンスによって呼び出すことができませんでした。OrderedListmain

指示は後で私たちのインストラクターによって修正されましたが、時には学生としてあなたは密接に従うことができます.

于 2012-10-07T21:18:36.040 に答える