C++中实现文件中的声明不兼容
Incompatible Declaration in Implementation file in C++
我的实验室实现文件中有几个不兼容的声明,我不知道为什么。我仍在学习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修饰符。
相关文章:
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 字符类型转换不兼容
- Qt:如何使不兼容的发送方/接收方参数兼容?
- 视觉工作室 2017;启用 /permissive 时,类型 "const wchar_t *" 的参数与类型 "PWSTR" 的参数不兼容
- 为什么转换函数声明不需要至少一个定义类型说明符
- 使用不兼容的分配器复制分配无序列图
- 类型为 "int*" 的参数与 C++ 中错误类型"int**"参数不兼容
- 使方法常量后声明不兼容
- 标识符未定义且不兼容的声明
- 绘制SFML船时不兼容的声明
- 收到 CUDA 错误"声明与以前的"variable_name"不兼容
- C++中实现文件中的声明不兼容
- 声明与(方法)指针不兼容
- 为什么boost::bind与正向声明不兼容
- 声明不兼容.(指针)
- 3 智能感知:声明与"<error-type>Airport::getDetails(std::string)"不兼容
- 链表声明与原型不兼容
- 异常规范在声明和功能实现方面不兼容
- 声明不兼容,初学者c++
- 内置函数'malloc'的不兼容隐式声明