2012-09-09 107 views
0

我只是分裂了一個C++程序,我正在寫入多個文件。頭文件類成員函數聲明錯誤:嵌套名稱說明符中的「不完整類型」名稱

現在我收到每個成員函數聲明的這個錯誤。

我在做什麼錯?

3 class Office{ 
    4  private: 
    5   static const int IDLE = 0, BUSY = 1; 
    6   const int num_tellers; 
    7   int students_served; 
    8 
    9   vector<double> que;             // a vector que which holds the arrival times of students entering an Office 
10   vector<int> tellers;             // a vector to hold the status (IDLE or BUSY) of the tellers    *** INITIALIZED TO SIZE tellers[num_tellers] IN CONSTRUCTOR *** 
11 
12 
13   variate_generator<mt19937, exponential_distribution<> > serve_time; // random variable, determines the time it takes a teller to serve a student 
14 
15  public: 
16 
17   Office(double const office_mean, int const num_tellers) : num_tellers(num_tellers), tellers(vector<int>(num_tellers, IDLE)), 
18                 serve_time(variate_generator< mt19937, exponential_distribution<> >(mt19937(time(0)), exponential_distribution<>(1/office_mean))){ 
19   }            // initialize tellers vector to size num_tellers w/ tellers[i] = IDLE, accumulated times to , and initializes serve_time random variable 




37 int Office::departure_destination(Event* departure) {  // returns the next destination of a student departing from an Office 
38 
39  if (departure->depart_from == AID) { 
40   return determine_destination(.15, .15, 0, 0, .70); 
41  else if (departure->depart_from == PARKING) 
42   return next_destination = determine_destination(.3, 0, 0, 0, .7); 
43  else if (departure->depart_from == REGISTRAR) 
44   return next_destination = determine_destination(.25, 0, .1, 0, .65); 
45  else if (departure->depart_from == BURSAR) 
46   return next_destination = determine_destination(0, .1, .2, .1, .60); 
47  else 
48   return -1; 
49 } 
50 

然後在頭文件

57 int Office::departure_destination(Event* departure); 
+0

一些代碼將是一個良好的開端。 – chris

+0

好吧,它就像600線左右,我可以張貼標題,雖然我猜.. – user1647959

+1

做一個較小的例子與一個功能,沒有別的。最好的事情是顯示錯誤的最小可編譯樣本。 – chris

回答

3

確定。遵循這些規則,你應該用的東西相當接近結束:

  1. 認沽類,類型定義,#define語句,模板和內聯函數在頭文件
  2. 纏上的#ifndef頭文件/#定義/# endif,以便意外的多個包含不會導致多重定義的符號
  3. 將您的實現放入您的C++文件中,幷包含具有(1)的這些頭文件。

理解這一點的最簡單方法是認識到頭文件中沒有內容會生成實際的機器指令或數據。標題中的所有內容都是聲明式的。它描述如何使用生成代碼或數據,例如聲明變量。您的C++文件需要這些「大綱」以便了解當您嘗試調用另一個文件中的某個函數,調用某個對象的方法時需要的內容等。

所有#define類型的指令都是文本處理。

模板實際上是一種圖靈完備的語言,但是直到你用它們做了什麼之後它們才生成代碼......然後它就像它們正在生成自己的C++文件一樣。

類聲明定義了一個對象應該有什麼,如果你選擇了一個。

所以,一個典型的頭文件(說my_header)看起來就像這樣:

#ifndef MY_HEADER 
#define MY_HEADER 

extern int global; 

class A { 
    ... data declarations, inline functions ... 
    public: 
     void f(); 
}; 

#endif 

和C++文件:

#include "my_header" 

int global; // only in ONE C file...this generates real data 

void A::f() { ... generates real code to be linked to ... } 
+0

那麼,你肯定會遇到問題:沒有函數聲明。我即將發佈這一小部分,但這不僅僅是那些新來的分班人員的問題。 – chris

+0

welp。那會做到這一點哈哈。謝謝你們。對於我的糟糕準備感到抱歉 – user1647959

相關問題