Question

Je commence avec des structures et j'ai des problèmes allouant dynamiquement mon tableau de structure. Je fais ce que je vois dans mon livre et sur Internet, mais je ne peux pas bien faire les choses.

Voici les deux messages d'erreur complets:

C2512: «Enregistrement»: Aucun constructeur par défaut approprié disponible

Intellisense: Aucun constructeur par défaut n'existe pour la classe "enregistrement"

#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;
}
Était-ce utile?

La solution

L'erreur est assez claire. Au moment où vous essayez d'allouer un tableau:

Record *room = new Record[5];

un constructeur par défaut, c'est-à-dire Record::Record(), doit être implémenté de sorte que 5 instances de Record peut être créé:

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

Notez également que l'allocation dynamique est quelque chose que vous voulez éviter autant que possible en C ++ (sauf les situations où vous en avez une très bonne raison). Dans ce cas, il serait plus raisonnable d'utiliser un std::vector Au lieu:

std::vector<Record> records(5);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top