从另一个类中访问类字段的语法
c++ Access class field from another class syntax
我有两个类
class Book
{
public:
int _pages;
string* _name;
};
class Shelf
{
public:
int shelfName;
int _booksCount;
book** _books;
};
(有更多不相关的函数和变量)
和我想创建一个函数,它将计算书架上的总页面,我是新的OOP,所以我想做的是:
double Shelf:: getAvg()
{
int sum, i;
for (int i = 0; i < __bookCount-1; i++)// the count not considering inedx 0
{
sum += _books[i]._pages;// need to be fixed<<
}
}
我很确定唯一的问题是最后一行语法,你能指导我如何纠正它吗?提前致谢
这里有多个错误。
-
_name
成员中的无意义* - 错误_booksCount
- 方法
getAvg
中缺少返回 -
Shelf
类getAvg
方法缺少申报 最后,主要的错误是,你有成员
Book** _books
,它是指针的指针,但是你把它当作指针来访问。您应该将_books
声明为Book* _books
。你的代码应该(可以)看起来像:
class Book {
public:
int _pages;
string _name;
};
class Shelf {
public:
int shelfName;
int _booksCount;
Book* _books;
double getAvg();
};
double Shelf::getAvg()
{
int sum, i;
for (int i = 0; i < _booksCount; i++)
{
sum += _books[i]._pages;
}
return sum / _booksCount;
}
我希望,它帮助:)
想法:你可以使用一些stl容器(例如vector
)代替数组Books
在Shelf
vector<Book> _books;
因为如果你使用*和new(或malloc)进行初始化,你的对象不是在Stack上分配的,而是在Heap上分配的,所以你应该用delete(或free)删除它,否则会导致内存泄漏。
我认为你想这样做:
#include <vector>
#include <string>
#include <iostream>
#include <memory>
class Book
{
public:
int _pages;
std::string* _name;
Book(const char* nameArg, size_t pagesArg): _name(new std::string(nameArg)), _pages(pagesArg) {}
~Book() { delete name;}
};
class Shelf
{
std::string shelfName;
std::vector<std::unique_ptr<Book>> _books;
public:
Shelf(const char* nameArg): shelfName(nameArg) {
}
void addBook(const char* bookNameArg, size_t pagesArg) {
_books.push_back(std::unique_ptr<Book>(new Book(bookNameArg, pagesArg)));
}
size_t getNoPagesOnShelf() const {
size_t pagesCount = 0;
for( int tmp = 0; tmp < _books.size(); ++tmp) {
pagesCount += _books[tmp]->_pages;
}
return pagesCount;
}
};
int main() {
Shelf shelf("Number 1");
shelf.addBook("Book1", 500);
shelf.addBook("Book1", 20);
shelf.addBook("Book1", 300);
std::cout << "Total number of pages in shelf is : " << shelf.getNoPagesOnShelf() << std::endl;
}
用c++11标志编译,如果你使用的是c++,添加——std=c++11希望对大家有所帮助
四个问题:
- 你在for循环中有一个名称
__bookCount
的错字:它应该是_bookCount
(一个'_'而不是两个) - 你增加
i
,只要它小于_bookCount - 1
:你应该把它改为小于或等于号,或者只放_bookCount
。 - 你的代码中没有
return
语句 - 你有双指针指向
_books
,所以_books[i]
不是一个对象实例,它是一个指针类Book
的对象。你应该使用_books[i]->_pages
,或者(*_books[i])._pages
相关文章:
- 将结构字段的类型展开为可变模板参数
- 将位字段导出到数组
- 为了方便起见,我应该避免公开私有字段变量吗
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 在java中读取c++字节的位字段
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- 私有字段对象与私有继承?
- 声明没有默认构造函数的字段
- C++内存模型和位字段的最大序列
- 声明为无效的变量或字段'...' Ardunio 编译器上的错误
- 如何在QByteArray中放置和检索位字段而不会感到痛苦?
- C++ win32 如何使密码字段可选并启用复制和粘贴?
- 如何通过UDP接收QByteArray并将其解析为位字段结构?
- 仅匹配集合中的某些字段
- 结构字段名称与 GDB 中的 STL 数组冲突
- 构造以shared_ptr作为成员字段的类的正确语法是什么
- std::array 作为字段的语法是什么,里面的对象必须使用接受参数的 ctor 构造
- c++位字段(有效地传递它,也就是.语法糖)
- 从另一个类中访问类字段的语法
- QODBCResult::exec: 无法执行语句:"[Microsoft][ODBC SQL Server Driver]COUNT 字段不正确或语法错误