我开始使用结构,我在动态分配结构数组时遇到了问题。我正在做我在书中和互联网上看到的内容,但我做不到。
以下是完整的错误消息:
C2512:'记录':没有合适的默认构造函数
IntelliSense:“Record”类没有默认构造函数
#include <iostream>
#include <string>
using namespace std;
const int NG = 4; // number of scores
struct Record
{
string name; // student name
int scores[NG];
double average;
// Calculate the average
// when the scores are known
Record(int s[], double a)
{
double sum = 0;
for(int count = 0; count != NG; count++)
{
scores[count] = s[count];
sum += scores[count];
}
average = a;
average = sum / NG;
}
};
int main()
{
// Names of the class
string names[] = {"Amy Adams", "Bob Barr", "Carla Carr",
"Dan Dobbs", "Elena Evans"};
// exam scores according to each student
int exams[][NG]= { {98, 87, 93, 88},
{78, 86, 82, 91},
{66, 71, 85, 94},
{72, 63, 77, 69},
{91, 83, 76, 60}};
Record *room = new Record[5];
return 0;
}
答案 0 :(得分:2)
错误很明显。当你试图分配一个数组时:
Record *room = new Record[5];
必须实现默认构造函数,即Record::Record()
,以便可以创建5个Record
实例:
struct Record
{
...
Record() : average(0.0) { }
Record(int s[], double a) { ... }
};
另请注意,动态分配是您希望在C ++中尽可能避免的事情(除非您有充分的理由)。在这种情况下,使用std::vector
代替更合理:
std::vector<Record> records(5);