2017-02-16 34 views
0

構造体#1(e [0])のコードを取得する必要がありますが、次のエラーが発生します。 ""エラー: 'emp1'のメンバ 'get_code'を要求します。これはポインタ型 'Employee *'(おそらく ' - >'を使用することを意味していますか?) " これを修正する方法を理解できません。プラス、それは私が構造を使用することに拘束されているので、私は " - >"が何であるかはわかりませんが、それが何らかのオペレータか何かであれば、私たちは教えられていないので、それはまだ。 (同様の質問への回答は、使用することをお勧め - 。>私のためにそれdoesntの仕事ので)私も使ってみました *(EMP1).get_code()構造体の配列内の構造体へのポインタ

#include <iostream> 

#include <string.h> 

using namespace std; 
    struct Employee{ 

private: 
    string code; 
    string name; 
    float salary; 

public: 
    void set_code(string c){ 
     code=c; 
    } 
    void set_name(string n){ 
     name=n; 
    } 
    void set_sal(float s){ 
     salary=s; 
    } 
    string get_code(){ 
     return code; 
    } 
    string get_name(){ 
     return name; 
    } 
    float get_sal(){ 
     return salary; 
    } 
}; 

int main(void) { 
    Employee e[2],*emp1,*emp2; 
    string c,n; 
    float s; 
    for (int i=0;i<2;i++){ 
    cout<<"Enter code for employee "<<i+1; 
    cin>>c; 
    e[i].set_code(c); 
    cout<<"Enter name for employee "<<i+1; 

    cin>>n; 
    e[i].set_name(n); 
    cout<<"Enter salary for employee "<<i+1; 
    cin>>s; 
    e[i].set_sal(s); 
    } 
    *emp1=e[0]; 
    cout<<emp1.get_code(); 

} 
+0

エラーメッセージについては何が不明ですか? –

+0

エラーは 'emp1-> get_code()'を使用するように指示しています。 'x-> y()'は一般的に '(* x).y()'と同じです。 –

+0

_ "私も' *(emp1).get_code() '"を使用してみました。 " –

答えて

0

変更

cout<<emp1.get_code(); 

cout<<emp1->get_code(); 

->ポインタに関数を呼び出すために使用されると、それはあなたが何をする必要があるか理由ですはポインタです。

これを行う前に、その文の上の行を見る必要があります。

*emp1=e[0]; 

*emp1はすなわち、それは何を指していない、あなたがそれにして値をコピーしようとしている、初期化されていません。 *emp1が初期化されていないと、これを行うことはできません。

1

まず第一に、この行が正しくありません:

*emp1=e[0]; 

何あなたのラインが行うことは構造値を割り当てている「E [0]」ポインタ「EMP1」での構造に関するものです。しかし、ポインタ 'emp1'は決して初期化されないので、無効な場所に書き込むことになります。あなたが書くために必要なもの は次のようになります。実際には「[0] E」の場所にEMP1を設定します

emp1=&e[0]; 

第2に、シンボル ' - >'は、ポインタのメンバーにアクセスするときに使用するものです。 この場合、あなたは書くべきではありません。

cout<<emp1.get_code(); 

むしろ:

cout<<emp1->get_code(); 

をあなたはそれを書くために必要な理由は「EMP1」のポインタであるということです。したがって、メンバー 'get_code'にアクセスするには、 ' - >'記号を使用する必要があります。

+0

この回答は不十分です。上の '* emp1 = e [0];'行は、初期化されていないポインタを参照してそれにコピーしています。 –

+0

真。私の悪い!コメントを少し修正します。 – Pimich

関連する問題