Ошибка при заполнении Класс «не называет тип» включает файл заголовка спонтанного - PullRequest
0 голосов
/ 11 февраля 2020

Я новичок в языке C ++ и столкнулся с ошибкой компиляции, которая поставила меня в тупик на несколько дней для моего последнего задания. Код использует класс GradeBook для установки как названия курса, так и имени преподавателя.

Вот файл драйвера, в который я включаю заголовочный файл, который содержит класс GradeBook

#include <iostream>
#include "GradeBook.h"

using namespace std;

int main()
{

    gradeBook gradeBook1 ();
    gradeBook gradeBook2 ();

    cout << "Grade Book Initial Course Name: \n" << gradeBook1.getCourseName() << endl;
    cout << "Initial Instructor Name: \n" << gradeBook2.getInstuctorName() << endl;

    gradeBook.displayMessage();

    return 0;
}

Здесь находится заголовочный файл. Я добавил в #ifndef, чтобы предотвратить возможные ошибки зацикливания на основе исследования этой проблемы.

#ifndef GRADE_H
#define GRADE_H


#include <string>
#include "GradeBook.cpp"

// __Grade_Book__
class GradeBook
{
    std::string courseName, instructorName;

public:
    // constructor initializes courseName with string  supplied an argument
    GradeBook( std::string name);

    //function sets the course name and limits length
   void setCourseName(std::string name);
   void setInstructorName(std::string iName);


    //function gets the course name
    std::string getCourseName();
    std::string getInstructorName();

    //function displays a welcome message
    void displayMessage();

};
#endif

Это исходный файл, в котором ошибка "GradeBook" не называет тип "возникает в первом случае GradeBook, несмотря на то, что он связан с файлом заголовка. Мне кажется, что этот файл не является полностью необходимым для этого кода, но он необходим для назначения. * но все, что я пробовал, привело к той же ошибке компиляции, настаивая на том, что класс GraddeBook не был определен.

#include <iostream>
#include "GradeBook.h"

using namespace std;



// constructor initializes courseName with string supplied an argument

GradeBook::GradeBook(string name)

{
    setCourseName(name);
    setInstructorName (iName);
     // call set function to initialize courseName
}
//function sets the course name
void GradeBook::setCourseName(string name)
{
    if (name.length() <= 30)
        courseName = name;
    else
    {
        courseName = name.substr(0, 30); //start at 0, length of 30
        cout << "Course Name \" " << name << "\" exceeds maximum length (30).\n"
        << "Limiting courseName to the first 30-characters.\n" << endl;
    }
}
void GradeBook::setInstuctorName(string iName)
{
    if (iName.length() <= 20)
        instructorName = iName;
    else
    {
        instructorName = iName.substr(0, 30); //start at 0, length of 30
        cout << "Instructor Name \" " << iName << "\" exceeds maximum length (20).\n"
        << "Limiting Instructor Name to the first 20-characters.\n" << endl;
    }
}

//function gets the course name
string GradeBook::getCourseName()
{
    return courseName;
}

string GradeBook::getInstructorName()
{
    return InstructorName;
}
//function displays a welcome message
void GradeBook::displayMessage()
    {
        cout << "Welcome to the Grade book for: \n" << getCourseName() << endl;
        cout << "This course is presented by: \n" << getInstructorName() << endl;
    }

1 Ответ

2 голосов
/ 11 февраля 2020

Обязательно используйте правильное имя класса при объявлении переменной. Идентификаторы чувствительны к регистру.

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