假设我有2个类Foo
和Cook
,Book
是一个结构。
以前Book
是一个全局变量,我想将其更改为Foo
所有,以便我可以拥有许多Foo
个Book
。
Cook
读取Book
,但Foo
会不时更新Book
的值。
我测试的以下代码不起作用。我是C ++的新手,我不明白为什么这不起作用。
class Foo {
private:
Book book;
Cook cook;
public:
Foo();
virtual ~Foo();
};
class Cook {
private:
Book * book;
public:
Cook();
virtual ~Cook();
void setBook(Book * book);
};
然后在Foo
的构造函数中有一个:cook.setBook(&book);
答案 0 :(得分:1)
你正在做的事情应该可以正常工作,虽然我对你应该使用std::shared_ptr
的{{3}}表示同意。
如果您发现自己的值不同步,则可能是您已覆盖Foo.book
,但该更改尚未传播到Foo.cook.book
。
可能更好的设计是:
class Foo {
private:
Book book;
Cook cook;
Book& getBook();
public:
Foo() : cook(std::bind(getBook,this));
virtual ~Foo();
};
class Cook {
private:
std::function<Book&()> _memfunptr;
public:
Cook(std::function<Book()> memfunptr): _memfunptr(memfunptr);
virtual ~Cook();
};
在此处,只要您想在[{1}}内引用Foo.book
,就可以使用Foo.cook
来访问它。
作为一个注释,你们中的一些问题可能与课程实施有关?您应该在每个Cook._memfunptr
范围的末尾添加分号,并且应该定义class
构造函数Cook
而不是 Cook();