[英]How to access a class member variable in an object (which is also a member of the class)
您好我想完成以下任務。 我可以在 Lower class 中創建一個構造函數,它采用 Upper 的 object,在 Upper 中,我可以將自己的引用傳遞給 lower,但這會產生循環依賴錯誤。
有人可以幫我解決這個問題嗎?
#include<iostream>
using namespace std;
class Lower {
public:
void doSomething() {
// Do something with the data variable of the Upper class
cout << data << endl;
}
Lower();
};
class Upper {
public:
int data;
Lower lower; // object of Lower class
Upper() : data(0), lower() {}
};
int main(void) {
Upper upper();
return 0;
}
可以將自己的引用傳遞給lower,但這會產生循環依賴錯誤。
如果您轉發聲明Upper
並將doSomething
的定義移到Upper
的定義之后,則不會,如下所示:
#include <iostream>
class Upper; // forward declaration
class Lower {
public:
// declaration only, reference to incomplete type is allowed
void doSomething(Upper &upper);
};
// Definition of Upper
class Upper {
public:
int data;
Lower lower; // object of Lower class
Upper() : data(0), lower() {}
void doSomething()
{
this->lower.doSomething(*this);
}
};
// now the definition, here Upper is a complete type
void Lower::doSomething(Upper &upper)
{
// Do something with the data variable of the Upper class
std::cout << upper.data << std::endl;
}
int main(void) {
Upper upper;
upper.doSomething(); // prints 0
}
不確定你是否想這樣使用它,但它應該展示這個想法。
Lower::doSomething
應該處理哪個Upper
實例? 你可以有一個沒有Upper
實例的Lower
實例,然后呢?
如果您需要訪問Upper
,您應該有一個指針或引用。
class Upper;
class Lower {
Upper * upper;
public:
void doSomething() {
std::cout << upper->data << std::endl;
std::cout << data << std::endl;
}
Lower(Upper * upper) : upper(upper) {}
};
class Upper {
public:
int data;
Lower lower; // object of Lower class
Upper() : data(0), lower(this) {}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.