无法在类中使用成员函数

时间:2012-03-27 17:01:41

标签: c++ oop class object

我目前正在学习课程,并且在课程实施文件中遇到了问题。

在我的类标题/规范文件Book.h中,我有公共成员函数setPages

#ifndef BOOK_H
#define BOOK_H
#include <string>
#include "Author.h"
#include "Publisher.h"

class Book
{
private:
    std::string _title;
    std::string _edition;
    int _pages;
    int _copyrightYear;
    Author _author;
    Publisher _publisher;
public:
    Book (std::string title, Author author, Publisher publisher)
    {_title = title; _author = author; _publisher = publisher;}

    void setPages (int pages);
    void setCopyYear (int copyrightYear);
    void setEdition (std::string edition);
    std::string getTitle () const;
    std::string getEditon () const;
    int getPages () const;
    int getCopyYear () const;
    Author getAuthor () const;
    Publisher getPublisher () const;

};
#endif

在我的Book.cpp实现文件中,我有

#include <string>
#include "Author.h"
#include "Publisher.h"
#include "Book.h"

void Book::setPages (int pages)
{
    _pages = pages;
}

我不断收到Book不是类名或命名空间的错误,但我看不出我做错了什么。我包含了我的Book头文件并进行了检查,以确保在课堂上拼写正确。我在其他课程中做了同样的事情并且工作正常,所以我不明白为什么不这样做。

任何帮助表示感谢。

以下是Publisher.hAuthor.h

#ifndef PUBLISHER_H
#define PUBLISHER_H


class Publisher
{
private:
    std::string _name;
    std::string _address;
    std::string _phoneNumber;
public:
    Publisher (std::string& name)
    {_name=name;}

   void setAddress (std::string address);
   void setNumber (std::string phoneNumber);

    std::string getAddress () const;
    std::string getNumber () const;

    bool operator==(std::string name)
    {
        if (_name == name)
            return true;
        else 
            return false;
};

#endif

和Author.H

#ifndef AUTHOR_H
#define AUTHOR_H

class Author
{
private:
    std::string _name;
    int _numberOfBooks;
public:
    Author(std::string& name)
    {_name = name;}

    void setNumOfBooks (int numberOfBooks);
    int getNoOfBooks () const;

    bool operator==(std::string _name)
    {
        if (this->_name == _name)
            return true;
        else
            return false;
    }
};
#endif

2 个答案:

答案 0 :(得分:0)

直到@ahenderson决定将他的评论转为答案:

  “Publisher.h”中的

bool operator==(std::string name)在您的示例中缺少一个大括号。实际上是在您的代码中还是复制粘贴错误?

bool operator==(std::string name)
{
    if (_name == name)
        return true;
    else 
        return false;

哎呀,这里没有支撑!

答案 1 :(得分:0)

建议:简化您的operator==方法:

表达式_name == name已经返回truefalse。无需将其放入返回truefalse的if子句中。

试试这个:

bool operator==(const std::string& name)
{
    return (_name == name);
}

在上面的示例中,将直接评估表达式并返回结果。

此外,如果您的变量以下划线“_”开头,则可能会遇到编译器问题。更改您的命名约定,因此这个问题不会引起它的丑陋。两种常见做法是附加后缀name_或前缀为m_name之类的内容。