2016-07-08 5 views
-6

別のクラスへの参照としてオブジェクトを送信しようとしています。しかし、私はこのエラーで打たれました。私はどのように移動するか分からない。私が間違っているところで私を助けてください。お互いを参照するC++クラスをコンパイルする際のエラー

#include<iostream> 
#include<conio.h> 
using namespace std; 
class reg_view 
{ 
    public: 
     void getdetails(reg_model *ptr1) 
     { 
      cout<<"Enter id: "; 
      cin>>ptr1->id; 
      cout<<"Enter name: "; 
      cin>>ptr1->name; 
     } 
}; 
class reg_model 
{ 
    private: 
     int id; 
     char name[20]; 
    public: 

}; 
class reg_db 
{ 
    public: 
     void insert(reg_model *ptr2) 
     { 
      cout<<ptr2->id<<endl<<ptr2->name<<endl; 
     } 
}; 
class reg_ctrl 
{ 
     public: 
      void fun1() 
      { 
       reg_view rv1; 
       reg_model rm1; 
       rv1.getdetails(&rm1); 
       reg_db rd1; 
       rd1.insert(&rm1); 
      } 
}; 
int main() 
{ 
    reg_ctrl rc1; 
    rc1.fun1(); 
    return 0; 
} 

他のクラスへの参照としてオブジェクトを送信しようとしています。私はエラーを取得

error: 'reg_model' has not been declared 
In member function 'void reg_view::getdetails(int*)':| 
request for member 'id' in '* ptr1', which is of non-class type 'int'| 
request for member 'name' in '* ptr1', which is of non-class type 'int'| 
In member function 'void reg_db::insert(reg_model*)':| 
'int reg_model::id' is private| 
within this context| 
'char reg_model::name [20]' is private| 
within this context| 
In member function 'void reg_ctrl::fun1()':| 
no matching function for call to 'reg_view::getdetails(reg_model*)'| 
candidate is:| 
void reg_view::getdetails(int*)| 
no known conversion for argument 1 from 'reg_model*' to 'int*'|<b 
+0

コンパイラがまだ見ていない型へのポインタを逆参照することはできません。 'reg_model'のクラス定義をファイルの先頭に移動します。 –

+0

'reg_view'をコンパイルする時点で、' reg_model'は実際には宣言されていません。 'reg_view'の上に' reg_model'を移動してください。 –

+0

また 'ptr1-> id ...'は、 'reg_model'のクラス減速ではこれらのフィールドがプライベートであると考えると機能しません。 –

答えて

0

あなたの順序は、クラスでなければなりません:

  • reg_model
  • reg_view
  • reg_db
  • reg_ctrl

reg_modelつもりな作業ではありませんおい属性をprivate、goodとして定義しました。しかし、彼らがプライベートである場合、あなたはそれらを読むための公共の機能が必要です。だから、パブリックセクションでreg_modelするためにこれを追加します。

int GetId(void) cnst {return id;} 
char* GetName(void)const {return name;} 

今、これらの新しい機能を使用するためにあなたにreg_db::insert()機能とreg_view::getdetails()機能を変更します。

あなたのコードがうまくいきました。

関連する問題