2

こんにちは私は次のようなオブジェクトを含むマップを作成しようとしています:class Employee >> Employeeから派生:次のクラスです:Worker、Manager、ViceManage。私のマップでは、オブジェクトEmployeeをchar*であるIDでソートしたいと思っています。次のようなマップを作成しようとしました。`

multimap<const string,Employee*> t1
t1<string,Employee>::iterator myIterator;
Date e(17,6,1985);
Address a("somecity","somestreet",15,12);
ViceManager* d = new ViceManager("John","Doh","035845778", e,a,"03-9458353",10000,85,"gsdasda");
t1.insert(make_pair(d->GetId(),d));
myIterator=t1.begin();
myIterator->comp_value->PrintEmployee();

私は私のコードでたくさんの問題を抱えています私はあなたたちがthxを前もって言いたいことを聞きたいです

4

2 に答える 2

3

実際、そこには2つのエラーしかなく、どちらもイテレータに関連しています。

multimap<const string,Employee*> t1;
multimap<string,Employee*>::iterator myIterator; //Note the corrected iterator type
Date e(17,6,1985);
Address a("somecity","somestreet",15,12);
Employee* d = new ViceManager("John","Doh","035845778", e,a,"03-9458353",10000,85,"gsdasda");
t1.insert(make_pair(d->GetId(),d));
myIterator=t1.begin();
myIterator->second->PrintEmployee(); //Note the way of accessing the value

このコードは実際にはマップ機能を利用していないことに気付きました。これはコードの他のセクション用だと思います。

私が見逃したいくつかの間違いを修正するための編集

于 2010-09-02T16:28:16.097 に答える
2

まず第一に、イテレータはmultimapあなたの場合のテンプレートクラスでtypedefされている型です。したがって、次のように書く必要があります。

multimap<const string,Employee*>::iterator myIterator;

Employee質問の2番目の部分については、従業員のタイプ(Worker、Manager、およびViceManage)を識別する新しいフィールドをクラスに追加できます。次に、そのフィールドに応じてキャストします。

if ( myIterator->type == VICE_MANAGER ) 
  static_cast<ViceManager*>(*myIterator->second)->PrintEmployee();

PrintEmployeeクラスが多形である場合(これが推奨されるソリューションです)、追加のキャストなしで呼び出すことができます。

myIterator->second->PrintEmployee();
于 2010-09-02T16:23:40.803 に答える