2016-05-22 19 views
-2

我有两个类是Student和StudentArray。制作动态数组对象并初始化它

在课堂上的学生,我已经宣布了一些学生的属性,如姓名,身份证,年龄等

在StudentArray类,我想创建学生类型的数组。 StudentArray类还包含一些功能,如插入,将数据插入学生类型数组中。我想在Array的相同索引处添加一个学生的完整学生数据,如姓名,年龄,ID等,但我无法理解如何做到这一点。

我也无法理解如何初始化StudentArray类的构造函数中的数组。这是我迄今为止所做的。在StudentArray类

学生班级

class student 
{ 
    public: 
    string name; 
    int id; 
    int age; 
    string semester; 
    string degreeprogram; 
}; 

StudentArray类

class StudentArray 
{ 
public: 
    student *s; 
    int used; 

    StudentArray(); 
    ~StudentArray(); 
    void input(); 
    void Insert(string n,int i,int a, string s, string dp); 
    int Search(string n, int i); 
    void DeleteAnyStudent(string n, int i); 
    void DeleteAll(); 
    void Edit(string n, int i); 
    void show(); 
}; 

构造StudentArray类的

StudentArray::StudentArray() 
{ 
    s = new student[100]; 
    for(int i=0;i<100;i++) 
    { 
     s[i] = new student(); //ERROR HERE 
    } 
    used = 0; 
} 

插入函数

void StudentArray::Insert(string n,int i,int a, string s, string dp) 
{ 
    s[used].name = n; //ERROR HERE 
    s[used].id = i; //ERROR HERE 
    s[used].age = a; //ERROR HERE 
    s[used].semester = s; //ERROR HERE 
    s[used].degreeprogram = dp; //ERROR HERE 
    used++; 
} 

我正在使用代码块。

在StudentArray的构造函数,错误消息是"no match for operator 'operator=' (operand types are ;student' and 'student*')". In the insert function, the error message is "error: request for member 'id' in 's.std::basic_string<_CharT, _Traits, _Alloc>::operator[]<char, std::char_traits<char>, std::allocator<char> >(((std::basic_string<char>::size_type)((StudentArray*)this)‌​->StudentArray::used‌​))', which is of non-class type 'char'|"

在插入功能,同样的错误被扔在每个之后,我写了“ERROR HERE”行,如姓名,身份证变量只有名称或年龄等变化

+1

“错误在这里”。它是编译时错误还是运行时错误?任何错误消息? –

+0

此外,为什么不'std :: vector'? –

+0

我使用的代码块,所以它只会引发错误,当我建立和运行程序。在StudentArray的构造函数中,错误消息是“不匹配运算符'operator ='(操作数类型是; student'和'student *')”。在插入函数中,错误消息是“错误:s中成员'id'的请求。std :: basic_string <_CharT,_Traits,_Alloc> :: operator [] ,std :: allocator >(((std :: basic_string :: size_type)((StudentArray *)this) - > StudentArray :: used))',它是插入函数中的非类类型'char'|“ – Yousaf

回答

1

s = new Student[100];你有100个默认的数组初始化Student对象,我认为这是你想要什么。

但是,你然后尝试分配给每一个指向另一个,新分配的对象的指针。这是行不通的 - 你试图给一个对象分配一个指针 - 而且不需要它。如果你只是完全删除那个循环,你会变得更好。

编辑:你的第二个问题是因为你有一个参数s这是一个字符串。隐藏名为s的成员变量。您需要重命名其中一个。 (应该不难找到更好的名字!)

+0

我可以在“s [used] .name = n”处发布错误消息,这可能会帮助您理解问题。错误消息是“错误:s.std :: basic_string <_CharT中的成员'name'的请求' _Traits,_Alloc> :: operator [] ,std :: allocator >((std :: basic_string :: size_type)((StudentArray *)this) - > StudentArray :: used))',它是非类类型'char'|“ – Yousaf

+1

您需要发布一个显示问题的最小代码示例。如果您想添加信息,请修改您的问题,而不是将它置于评论中。 –

+0

谢谢艾伦,问题解决了。 – Yousaf

-1

只需会员s就是student*因此s[i]的类型是student

我想你想有pointer to pointer,声明sstudent**

+0

这个答案有什么不好? – PcAF