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);
4

1 回答 1

3

好的。遵循这些规则,你应该会得到非常接近的结果:

  1. 将类、typedef、#defines、模板和内联函数放在头文件中
  2. 用#ifndef/#define/#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 ... }
于 2012-09-09T02:42:50.807 回答