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

Incompatible Declaration in Implementation file in C++

本文关键字:声明 不兼容 文件 实现 C++      更新时间:2023-10-16

我的实验室实现文件中有几个不兼容的声明,我不知道为什么。我仍在学习C++,但我看不出这个问题是什么。基本上,这个程序应该做的就是在运行时在最后吐出一条消息,说明欢迎来到课本,并与老师一起说明课本上的班级。但是,由于不兼容,实现文件中的set和get语句不允许我进行编译。我需要一些技巧谢谢。

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

收割台-

#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 forn" << 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);

除非courseName被声明为mutable,否则它永远不会作为const成员函数工作。此外,name并没有在此上下文中声明。

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

声明为:

void setCourseName(std::string);

而在定义

void GradeBook::setCourseName() const

哪个不正确

正确的定义应该是

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

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