C++ 将自己类的实例传递给另一个
假设我有这些课程(问号标记我需要通过的问题):C++ 将自己类的实例传递给另一个,c++,class,instance,C++,Class,Instance,假设我有这些课程(问号标记我需要通过的问题): 您可以传递自己类的实例吗?或者这只是我这边失败的类结构的一个示例吗?成员函数中的当前对象是*this。您可以将其传递给另一个函数 你必须考虑这些类是如何相互依赖的,并且在声明完成之前,一个类不能使用其他类。 不过,这是可行的: class A { //... public: void pass(); }; class B { //... public: void doSth(const A &sth) {
您可以传递自己类的实例吗?或者这只是我这边失败的类结构的一个示例吗?成员函数中的当前对象是
*this
。您可以将其传递给另一个函数
你必须考虑这些类是如何相互依赖的,并且在声明完成之前,一个类不能使用其他类。 不过,这是可行的:
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();
}
您的类“包含”彼此的实例,因此您将面临未声明类型的错误。要解决此问题,您需要使用转发声明
你将面临另一个问题:
如果您的方法doSth()
和pass()
是内部定义的,那么您将面临一个问题:“使用不完整的类型”。解决方法是在类之外实现这些方法,以便每个对象在使用之前都已完全构造
该程序可能如下所示:
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;
}
考虑使用<代码>前向声明< /代码> +。在构造函数之后在类之外实现方法,以避免使用
不完整类型
编译时错误。是否尝试了原始代码?我的意思是,由于“B”实例是在函数定义块内声明的(在第二次编译过程中处理),而不是在函数签名中或作为“a”的数据成员声明的,所以它实际上应该编译。@Red.Wave:我明白你的意思。但我只是在OP面临一些问题时才指向他/她,比如声明无法编译的成员数据。我明白了。我只是怀疑我的记忆力。
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;
}