2017-02-16 39 views
0

所以我需要得到結構#1(e [0])的代碼,但我得到以下錯誤; 「錯誤:'emp1'中的成員'get_code'的請求,它是指針類型'Employee *'(也許你打算使用' - >'?)」 我真的不明白如何解決這個問題。此外,這是一個分配,所以我必然會使用結構,而且,我不知道「 - >」是什麼,但如果它是任何操作員或其他東西,我不允許使用它,因爲我們沒有教過那呢。 (答案爲類似問題建議使用 - >所以對我來說,這並不工作) 我也嘗試使用*(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'從不初始化,所以你最終會寫在一個無效的位置。 你需要寫的是:

emp1=&e[0]; 

實際上將設置EMP1到的位置 'E [0]'。其次,當你想訪問一個指針的成員時,符號' - >'就是你使用的符號。 在這種情況下,你不應該寫:

cout<<emp1.get_code(); 

反倒是:

cout<<emp1->get_code(); 

爲什麼你需要寫的是「EMP1」是一個指針的原因。因此,要訪問其成員'get_code',您需要使用符號' - >'。

+0

這個答案是不夠的。上面的行* emp1 = e [0];引用一個未初始化的指針並複製到它。 –

+0

是的。我的錯!我會稍微修改評論。 – Pimich

相關問題