https://repl.it/@IT18117110/MidRevLecEx << -----代码链接
This is the error I got
错误:“(”令牌之前的预期unqualified-id
st [i] .Student::( Name_i,id_i);
#include <iostream>
#include "Student.h"
#include "string.h"
using namespace std;
int main() {
int i = 0;
char Name_i[20];
int id_i;
int mark1_i;
int mark2_i;
Student st[3];
do{
cout<<"Enter Name:"<<i;
cin>>Name_i;
cout<<"Enter ID:";
cin>>id_i;
cout<<"Enter Marks1:";
cin>>mark1_i;
cout<<"Enter Marks2:";
cin>>mark2_i;
st[i].Student::(Name_i, id_i);
st[i].setMark1(mark1_i);
st[i].setMark2(mark2_i);
st[i].printMarks();
st[i].getAverageMark();
st[i].~Student();
i++;
}while(i < 3);
return 0;
}
答案 0 :(得分:0)
创建Student类的静态实例时,已经调用了Student类的默认构造函数。 学生st [3]; 您可以简单地在Student类构造函数中编写print语句(不带任何参数),您会发现它被调用了3次。
据我所知,构造函数无法显式调用,它用于构造对象。我认为您应该声明Student类实例的指针而不是声明静态指针,并且当您提供内存(通过调用new运算符)时,可以提供对象初始化参数值。
答案 1 :(得分:0)
当您在堆栈中分配对象时(按照您在示例中所做的方式),不应显式调用构造函数或析构函数。 构造函数在声明处调用:
Student st[3];
并且在退出范围时调用Destructor。
return 0;
} <--Here
如果要设置Name_i
,id_i
,请使用类似于用于设置标记(setMark1
和setMark2
)的设置器功能。
答案 2 :(得分:0)
您不应尝试显式调用构造函数或析构函数。
为数组中的对象分配一个新值,就像使用int
s或其他方法一样:
st[i] = Student(Name_i, id_i);
然后删除
st[i].~Student();