簡體   English   中英

指向結構數組中的結構的指針

[英]Pointer to a structure in an array of structures

因此,我需要獲取結構#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();

}

首先,這一行是不正確的:

*emp1=e[0];

您的行所做的是將結構值'e [0]'分配給指針'emp1'處的結構。 但是,指針'emp1'從未被初始化,因此您最終將在無效位置進行寫入。 您需要寫的是:

emp1=&e[0];

這實際上會將emp1設置為“ e [0]”的位置。

其次,符號“->”是您要訪問指針成員時使用的符號。 在這種情況下,您不應寫:

cout<<emp1.get_code();

反而:

cout<<emp1->get_code();

您需要寫的原因是'emp1'是一個指針。 因此,要訪問其成員“ get_code”,您需要使用符號“->”。

更改

cout<<emp1.get_code();

cout<<emp1->get_code();

->用於調用指針上的函數,這是您需要做的,因為emp是指針。

在此之前,您需要查看該語句上方的一行。

*emp1=e[0];

*emp1未初始化,即它沒有指向任何東西,您正在嘗試向其中復制一個值。 除非初始化*emp1 ,否則您將無法執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM