错误 C2512:没有合适的默认构造函数可用(不是类)
Posted
技术标签:
【中文标题】错误 C2512:没有合适的默认构造函数可用(不是类)【英文标题】:error C2512: no appropriate default constructor available (not classes) 【发布时间】:2013-11-19 23:21:49 【问题描述】:我从结构开始,但在动态分配结构数组时遇到问题。我正在做我在书中和互联网上看到的事情,但我做错了。
这是两个完整的错误消息:
C2512:“记录”:没有合适的默认构造函数可用
IntelliSense:“记录”类不存在默认构造函数
#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;
【问题讨论】:
如果你认为这个不会尝试调用Record
类的默认构造函数,那你就错了:Record *room = new Record[5];
【参考方案1】:
错误很明显。当您尝试分配数组时:
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);
【讨论】:
谢谢!我会赞成,但我没有足够的声誉。 @SoloMael:呵呵。没关系。我很高兴能帮上忙:)以上是关于错误 C2512:没有合适的默认构造函数可用(不是类)的主要内容,如果未能解决你的问题,请参考以下文章