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修饰符
我的实验室实现文件中有几个不兼容的声明,我不知道为什么。我还在学习 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修饰符