将自己的实例 class 传递给另一个实例
Passing instance of own class to another
假设我有这些 classes(问号标记我需要在此处传递的问题):
class A
{
...
public:
void pass()
{
B ins;
ins.doSth(?????);
}
};
class B
{
...
public:
void doSth(const A &sth)
{
...
}
}
int main()
{
A te;
te.pass();
}
你能传递一个你自己的实例 class 还是这只是我这边失败的 class 结构的一个例子?
成员函数中的当前对象是*this
。您可以将其传递给另一个函数。
你将考虑class如何相互依赖,而那个class不能使用另一个class直到申报完成。
虽然这会起作用:
class A
{
//...
public:
void pass();
};
class B
{
//...
public:
void doSth(const A &sth)
{
//...
}
};
// Here both classes are completely declared
void A::pass()
{
B ins;
ins.doSth(*this);
}
int main()
{
A te;
te.pass();
}
您的 class "contains" 是彼此的实例,因此您将面临未声明类型的错误。要解决此问题,您需要使用前向声明。
你还会遇到另一个问题:
如果您的方法 doSth()
和 pass()
是内联定义的,那么您将面临一个问题:"using incomplete types"。解决方法是在 class 之外实现这些方法,以便每个对象在使用前都已完全构建。
程序可能如下所示:
class A;
class B;
class A{
public:
void pass();
};
class B{
public:
void doSth(const A &sth){
}
};
void A::pass(){
B ins;
ins.doSth(*this);
}
int main(){
A te;
te.pass();
return 0;
}
假设我有这些 classes(问号标记我需要在此处传递的问题):
class A
{
...
public:
void pass()
{
B ins;
ins.doSth(?????);
}
};
class B
{
...
public:
void doSth(const A &sth)
{
...
}
}
int main()
{
A te;
te.pass();
}
你能传递一个你自己的实例 class 还是这只是我这边失败的 class 结构的一个例子?
成员函数中的当前对象是*this
。您可以将其传递给另一个函数。
你将考虑class如何相互依赖,而那个class不能使用另一个class直到申报完成。
虽然这会起作用:
class A
{
//...
public:
void pass();
};
class B
{
//...
public:
void doSth(const A &sth)
{
//...
}
};
// Here both classes are completely declared
void A::pass()
{
B ins;
ins.doSth(*this);
}
int main()
{
A te;
te.pass();
}
您的 class "contains" 是彼此的实例,因此您将面临未声明类型的错误。要解决此问题,您需要使用前向声明。
你还会遇到另一个问题:
如果您的方法 doSth()
和 pass()
是内联定义的,那么您将面临一个问题:"using incomplete types"。解决方法是在 class 之外实现这些方法,以便每个对象在使用前都已完全构建。
程序可能如下所示:
class A;
class B;
class A{
public:
void pass();
};
class B{
public:
void doSth(const A &sth){
}
};
void A::pass(){
B ins;
ins.doSth(*this);
}
int main(){
A te;
te.pass();
return 0;
}