【问题标题】:error C2512: no appropriate default constructor available (not classes)错误 C2512:没有合适的默认构造函数可用(不是类)
【发布时间】: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];

标签: c++ arrays structure dynamic-memory-allocation dynamic-allocation


【解决方案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:呵呵。没关系。我很高兴能帮上忙:)
猜你喜欢
  • 2016-03-28
  • 2013-08-25
  • 2012-10-10
  • 2014-12-31
  • 2012-12-16
  • 2014-01-31
  • 2014-05-26
  • 1970-01-01
相关资源
最近更新 更多