【发布时间】:2015-12-10 15:03:39
【问题描述】:
我有一个名为Student的班级
class Student
{ string name;
unsigned long int ID ;
string email;
unsigned short int year;
public :
Student() // Constructor
string getName(void);
unsigned long int getID(void);
string getEmail(void);
unsigned short int getYear(void);
{
还有另一个名为eClass的类
class eClass {
private:
string eclass_name;
Student* students[100];
unsigned int student_count;
public:
eClass(string name)
{
student_count =0 ;
eclass_name = name ;
}
bool exists(Student obj)
{
unsigned long int code = obj.getID();
bool flag = TRUE ;
for (unsigned int i = 0 ; i<=student_count ; i++ )
{
unsigned long int st = (*students[i]).getID();
if (code==st)
{
flag = FALSE;
}
}
return flag;
}
void add(Student& obj)
{
bool res = exists(obj);
if (res)
{
students[student_count] = new Student(); //probably the problem is here
*students[student_count] = obj ;
student_count++ ;
}
}
string getEclassName(void) { return eclass_name; }
unsigned int getStudentCount(void) { return student_count; }
Student getStudent(int i) { return *students[i-1]; }
};
语句 Student* students[100]; 必须看起来完全像这样。例如我不能这样写: Student* students[100]={} ;
而 main() 看起来像这样
int main()
{
Student JohnDoe("John Doe", 12345, 2, "johndoe@gmail.gr");
eClass Cpp("C++");
Cpp.add(JohnDoe);
}
基本上我有一个指向 Student 对象的指针数组,我想在每次添加新的 Student 对象时动态分配内存。
编译时我没有收到任何错误,但是当我尝试运行程序时,我得到的唯一结果是“Program_name.exe”停止运行...
我很确定问题与内存分配有关,但我无法找到并解决它。
有什么建议吗?
【问题讨论】:
-
据我所见,上面的代码看起来不错;你能发布
Student的实现吗? -
你为什么使用指向
Students的指针?只需存储Students。 -
根据您发布的内容,我估计主要错误在
exists(Student obj)。无论如何,您不应该将值传递给该函数(但我不认为 that 是主要错误)。将exists的实现添加到您的帖子中。 -
主要嫌疑人是
exists。 (旁注:exists如果学生不存在 则返回true非常违反直觉。) -
我编辑并添加了 Student 类和存在函数...使用指针不是我的选择...我们的教授要求我们这样做
标签: c++ pointers object dynamic