C ++ - ошибка: класс не был объявлен / выходит за рамки - PullRequest
0 голосов
/ 04 февраля 2020

Итак, у меня есть два класса - Dvd и DvdGroup. DvdGroup в основном управляет массивом dvds и предоставляет манипулятивные функции-члены для этого класса. Проблема заключается в том, что всякий раз, когда я пытаюсь скомпилировать DvdGroup. cc с помощью команды «g ++ - c Dvd.Group. cc», я получаю кучу ошибок, связанных с тем, что не объявлен «Dvd», и я не знаю почему.

Ниже приведены некоторые ошибки:

DvdGroup.h: 14: 12: ошибка: 'Dvd' не был объявлен void add (Dvd *);

DvdGroup.h: 18: 3: ошибка: «Dvd» не называет тип Dvd * dvdCollection [MAX_DVDS];

DvdGroup. cc: в конструкторе копирования 'DvdGroup :: DvdGroup (DvdGroup &) ':

DvdGroup. cc: 15: 6: ошибка:' Dvd 'не был объявлен в этой области для (Dvd d: dvds) {

Мне кажется, что я пропал что-то, и все они могут быть исправлены одним решением, потому что все они связаны с необъявленным классом DVD, но я не могу понять, что именно. Мне было интересно, если кто-нибудь может сказать мне, что я делаю не так? Я был бы очень признателен за любую помощь в исправлении этого.

DvdGroup. cc:

#include <iostream>
using namespace std;
#include "DvdGroup.h"

DvdGroup::DvdGroup(int n){ 
  numDvds = n;
}

DvdGroup::DvdGroup(DvdGroup& dvds){ 
    numDvds = dvds.numDvds;

    for(Dvd d: dvds){
        Dvd newDvd = Dvd;
    }
}

DvdGroup::~DvdGroup(){
//code
}

void DvdGroup::add(Dvd* d){ 
//code
}

DvdGroup.h:

#ifndef DVDGROUP_H
#define DVDGROUP_H
#define MAX_DVDS 15
#include <string>
using namespace std;

class DvdGroup
{
    public:
        DvdGroup(int);
        DvdGroup(DvdGroup&);    
        ~DvdGroup();
        void add(Dvd*);

    private: 
        Dvd* dvdCollection[MAX_DVDS];
        int numDvds;

};
#endif

Не знаю, если Заголовочный файл Dvd необходим, но здесь:

Dvd.h:

#ifndef DVD_H
#define DVD_H
#define MAX_DVDS 15
#include <string>

class Dvd{
  public:
    Dvd(string, int);
    void set(string, int);
    Dvd(Dvd&);
    int getYear();
    ~Dvd();
    void print();

  private:
    string title;
    int    year;
};


#endif

1 Ответ

0 голосов
/ 04 февраля 2020

Что вам нужно сделать, это предоставить определение класса Dvd для класса DvdGroup. Нужно знать, что это за символ. Решением вашей проблемы должно быть добавление:

#include "Dvd.h"

строки в файл DvdGroup.h.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...