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

时间:2015-02-14 17:56:05

标签: c++ declaration

我的实验室实验文件中有几个不兼容的声明,我无法弄清楚原因。我还在学习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");
}                                                  

4 个答案:

答案 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修饰符。