2012-03-30 4 views
0

При компиляции я получаю сообщение об ошибке «строка void operation», потому что я еще не определил Gate_ptr. Я думал об обмене «Gate_ptr» с помощью только «Gate *» вместо функции def. Однако есть ли способ сохранить мой нынешний стиль?Функции пользователя

class Gate 
    { 
     public: 
       Gate(); 
      void operation(Gate_ptr &gate_tail, string type, int input1, int input2=NULL); 

     private: 
       int cnt2; 
       int input_val1, input_val2; 
       int output, gate_number; 
       int input_source1, input_source2; 
       int fanout[8]; 
       Gate* g_next; 
       string type; 
}; 
typedef Gate* Gate_ptr; 
+0

Нет, компилятор должен знать о типах, прежде чем он может составить код. Он не читает вперед. Почему бы просто не объявить типы сначала? –

+0

'int input = NULL' (В списке параметров метода' operation') просто более странный (хотя и законный). Может быть, 'int * input = NULL' или' int input = 0'? – xaero99

+0

Ну, вот тогда, когда я получаю доступ к функции, и я решил не передавать параметр в «input2» – Josh

ответ

4

Предпочитают этот заказ:

//forward decleration 
class Gate; 

//typedef based on forward dec. 
typedef Gate* Gate_ptr; 

//class definition 
class Gate 
{ 
    public: 
//... 
}; 
+0

О, я могу это сделать? – Josh

+0

Да, как указывает Лучиан Григорь в своем ответе, 'class Gate;' - это декларация. Довольно полезная функция, когда у вас есть два заголовка, включая друг друга. – chris

4

Forwared DECLARE, сделайте ЬурейеЕ, а затем определить класс:

class Gate; 
typedef Gate* Gate_ptr; 

class Gate 
{ 
    public: 
      Gate(); 
      void operation(Gate_ptr &gate_tail, string type, int input1, int input2=NULL); 

    private: 
      int cnt2; 
      int input_val1, input_val2; 
      int output, gate_number; 
      int input_source1, input_source2; 
      int fanout[8]; 
      Gate* g_next; 
      string type; 
}; 

 Смежные вопросы

  • Нет связанных вопросов^_^