C++ 实现文件中的不兼容声明

Incompatible Declaration in Implementation file in C++

我的实验室实现文件中有几个不兼容的声明,我不知道为什么。我还在学习 C++,但我看不出这是什么问题。基本上所有程序应该做的是当它的 运行 是在最后吐出一条消息,说明欢迎使用成绩簿并与老师一起声明成绩簿的 class。但是,由于不兼容,我的实现文件中的 set 和 get 语句不允许我进行编译。我可以使用一些提示谢谢。

这是我对所有三个文件的代码:

Header -

#include <string> 

class GradeBook
{
public:
    explicit GradeBook(std::string);
    void setCourseName(std::string);
    std::string getCourseName() const;
    void displayMessage()const;
    void setInstructorName(std::string);
    std::string getInstructorName() const;
private:
    std::string courseName;
    std::string instructorName;  
};

实施文件 -

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

GradeBook::GradeBook(string name): courseName(name)

{

}

void GradeBook::setCourseName() const
{
    courseName = name;
}

string GradeBook::getCourseName() const 
{
    return courseName;
}

void GradeBook::setInstructorName() const
{
    instructorName = name;
}

string GradeBook::getInstructorName() const
{
    return instructorName;
}
void GradeBook::displayMessage() const
{
    cout << "Welcome to the grade book for\n" << getCourseName() << "with"     << getInstructorName << "!" << endl;
}

主文件-

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

int main()
{
    GradeBook courseName("COP2224: Intro To C++ Programming");
    GradeBook instructorName("Heidi Gentry Kolen");
}                                                  
void setCourseName(std::string);         // declaration in .h
void GradeBook::setCourseName() const    // implementation in .cpp

void setInstructorName(std::string);      // declaration in .h
void GradeBook::setInstructorName() const // implementation in .cpp

看出区别了吗?您的实现缺少 name 参数并具有尾随 const 修饰符。您需要更正这些错误:

void GradeBook::setCourseName(std::string name)
{
    courseName = name;
}

void GradeBook::setInstructorName(std::string name)
{
    instructorName = name;
}

实现的签名必须与其声明的签名匹配。

void GradeBook::setCourseName() const
{
    courseName = name;
}

错了。

不仅你没有给它提供与声明中相同的签名

void setCourseName(std::string);

它永远不会像 const 成员函数一样工作,除非 courseName 被声明为 mutable。此外 name 未在此上下文中声明。

我猜这只是一个打字错误。

声明是:

void setCourseName(std::string);

在定义中

void GradeBook::setCourseName() const

这是不正确的

正确的定义应该是

void GradeBook::setCourseName(std::string name) 

GradeBook 的构造函数前不需要显式关键字。 删除实现文件中setInstructorName和SetCourseName后的const修饰符