1

私は構造体から始めていますが、構造体配列を動的に割り当てる際に問題があります。本やインターネットで見たことをやっているのですが、うまくいきません。

両方の完全なエラー メッセージを次に示します。

C2512: 'Record': 適切な既定のコンストラクターがありません

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;
}
4

1 に答える 1

2

エラーは非常に明確です。配列を割り当てようとしているときまでに:

Record *room = new Record[5];

の 5 つのインスタンスを作成できるように、デフォルトのコンストラクター、つまりRecord::Record()を実装する必要があります。Record

struct Record
{
    ...
    Record() : average(0.0) { }
    Record(int s[], double a) { ... }
};

また、動的割り当ては、C++ ではできるだけ避けたいものであることに注意してください (本当に正当な理由がある場合を除きます)。この場合、std::vector代わりに を使用する方が合理的です。

std::vector<Record> records(5);
于 2013-11-08T02:55:20.500 に答える