4

現在、C++ のシミュレーション コースを受講していますが、タイトルに記載されている clang++ エラーが発生しています。同様の状況で同様のエラーがどこにも見つからないように見えるので、誰かが理由を教えてくれることを望んでいました(検索してください)。

変数定義ごとにエラーが発生しOffice*ます(187~190行目)。

175 class EventHandler {
176 
177     private:
178     double simulation_time;    // current simulation time
179     Office* aid, bursar, registrar, parking;
180     Event* current_event;
181     MinHeap* time_heap;
182 
183     public:
184 
185     void initialize_simulation() {  // initializes simulation time, offices, and event handler (time_heap)
186         simulation_time = 0;
187         aid = new Office(8, Tf);    // initializes financial aid office with Tf tellers, with serve time exponentially distributed with mean of 8 minutes
188         bursar = new Office(15, Tb);     // initializes bursar office w/ Tb tellers, exp distro, mean 15 min
189         registrar = new Office(5, Tr);    // registrar w/ Tr tellers, exp distro, mean 5 min
190         parking = new Office(10,Tp);       // parking office w/ Tp tellers, exp distro, mean 10
192         MinHeap* time_heap = new MinHeap();
193     }

Office* aid宣言を (たとえば)置き換えて に変更aid = new Office(15, Tf)するOffice* aid = new Office(15, Tf)と、エラーはなくなります。これらのクラス ポインターをすべてprivate.

興味深いことに (イライラしますか?)、これMinHeap* time_heap; time_heap = new MinHeap();は問題を引き起こしません。ポインター var を宣言してからクラスprivate の一部で定義することに関係があるのではないかと思いましたが、そうではないようです。public

ヘルプ?=|

4

2 に答える 2

6
Office* aid, bursar, registrar, parking;

1 つのポインターと 3 つのオブジェクトを宣言します。あなたはおそらくあなたが欲しいと思うでしょう:

Office *aid, *bursar, *registrar, *parking;

そして、あなたは実際に欲しい:

std::unique_ptr<Office> aid;
std::unique_ptr<Office> busar;
std::unique_ptr<Office> parking;
std::unique_ptr<Office> registrar;

コンストラクタ初期化子リストでそれらを初期化します。クラスがリソース所有者でない場合は、 を使用してstd::shared_ptrください。

于 2012-09-05T05:36:41.173 に答える
2

ここ:

Office* aid, bursar, registrar, parking;

のみaidです。Office*残りはOfficeです。コードを見ると、ポインターを使用しないことで問題を簡単に回避できるようです。

Office aid, bursar, registrar, parking;

それから

     aid = Office(8, Tf); 
     bursar = Office(15, Tb); 
     registrar = Office(5, Tr);
     parking = Office(10,Tp); 

また、initialize_simulation()一度だけ呼び出されるように設計されているようです。おそらく、コンストラクターで初期化する方がよいでしょう。

EventHandler::EventHandler() 
 : aid(8,Tf), bursar(15, Tb), registrar(5, Tr), parking(10, Tp) {}
于 2012-09-05T05:37:21.107 に答える