指向结构数组

时间:2017-02-16 16:18:03

标签: c++

所以我需要获得结构#1(e [0])的代码,但是我得到以下错误; "错误:请求会员' get_code'在' emp1'中,它是指针类型'员工*' (也许你打算使用' - >'?)" 我真的不明白如何解决这个问题。另外,它是一个分配,因此我必然会使用结构,而且,我也不知道" - >"是的,但如果它是任何操作员或其他东西,我不允许使用它,因为我们还没有被教过。 (类似的问题的答案建议使用 - >这样对我来说不起作用。) 我也尝试使用*(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();

}

2 个答案:

答案 0 :(得分:1)

首先,这一行不正确:

*emp1=e[0];

你的行做的是将结构值'e [0]'赋给指针'emp1'的结构。但是,指针'emp1'永远不会被初始化,因此您最终会在无效位置写入。 你需要写的是:

emp1=&e[0];

这实际上将emp1设置为'e [0]'的位置。

其次,符号' - &gt;'是您想要访问指针成员时使用的。 在这种情况下,你不应该写:

cout<<emp1.get_code();

而是:

cout<<emp1->get_code();

你需要写的原因是'emp1'是一个指针。因此,要访问其成员'get_code',您需要使用符号' - &gt;'。

答案 1 :(得分:0)

更改

cout<<emp1.get_code();

cout<<emp1->get_code();

->用于调用指针上的函数,这是你需要做的,因为emp是一个指针。

在您这样做之前,您需要查看该声明上方的一行。

*emp1=e[0];

*emp1未初始化,即它没有指向任何内容,而您正在尝试将值复制到其中。除非初始化*emp1,否则你不能这样做。