首页 > 解决方案 > 编译错误类“未命名类型”尽管包含头文件

问题描述

我是 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;
    }

标签: c++classcompiler-errorsheader-files

解决方案


声明变量时请务必使用正确的类名。标识符区分大小写。

    GradeBook gradeBook1;
    GradeBook gradeBook2;

推荐阅读