我目前正在学习课程,并且在课程实施文件中遇到了问题。
在我的类标题/规范文件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.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
答案 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
已经返回true
或false
。无需将其放入返回true
或false
的if子句中。
试试这个:
bool operator==(const std::string& name)
{
return (_name == name);
}
在上面的示例中,将直接评估表达式并返回结果。
此外,如果您的变量以下划线“_”开头,则可能会遇到编译器问题。更改您的命名约定,因此这个问题不会引起它的丑陋。两种常见做法是附加后缀name_
或前缀为m_name
之类的内容。