Невозможно использовать функцию-член внутри класса - PullRequest
0 голосов
/ 27 марта 2012

В настоящее время я изучаю классы, и у меня возникла проблема в файле реализации класса.

В моем заголовочном файле / файле спецификации 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 не является именем класса или пространством имен, но я не вижу, что я сделал неправильно. Я включил свой заголовочный файл Книги и проверил, чтобы все было правильно написано в классе. Я делал то же самое в других своих классах, и это работает, поэтому я не понимаю, почему это не так.

Любая помощь приветствуется.

Вот Publisher.h и Author.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 голосов
/ 27 марта 2012

Предложение: Упростите ваш operator== метод:

Выражение _name == name уже вернет true или false.Нет необходимости помещать его в условие if, которое возвращает true или false.

Попробуйте это:

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

В приведенном выше примере выражение вычисляется и результат возвращается напрямую.

Кроме того, вы можете столкнуться с проблемами компилятора, если ваши переменные начинаются с подчеркивания '_'.Измените соглашение об именах, чтобы эта проблема не поднимала уродливую голову.Двумя распространенными практиками является добавление суффикса name_ или префикса к чему-то вроде m_name.

0 голосов
/ 27 марта 2012

Пока @ahenderson не решит превратить свои комментарии в ответ:

bool operator==(std::string name) в "Publisher.h" в вашем примере отсутствует фигурная скобка.это на самом деле в вашем коде или ошибка копирования и вставки?

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

Упс, здесь нет скобок!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...