我的实验室实验文件中有几个不兼容的声明,我无法弄清楚原因。我还在学习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 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");
}
答案 0 :(得分:2)
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;
}
实现的签名必须与其声明的签名相匹配。
答案 1 :(得分:2)
void GradeBook::setCourseName() const
{
courseName = name;
}
那是错的。
您不仅错过了与声明
相同的签名void setCourseName(std::string);
除非const
声明为courseName
,否则它永远不会用作mutable
成员函数。在此上下文中也未声明name
。
我猜这只是一个错字。
答案 2 :(得分:1)
声明是:
void setCourseName(std::string);
在定义中
void GradeBook::setCourseName() const
哪个不正确
正确的定义应该是
void GradeBook::setCourseName(std::string name)
答案 3 :(得分:-4)
在GradeBook的构造函数之前,您不需要显式关键字。 在实现文件中的setInstructorName和SetCourseName之后删除const修饰符。