我如何转发声明 class 并稍后在 C++ 中使用其成员函数?
How can I forward declare a class and use its member funcions later in c++?
是否可以转发声明一个class然后使用它的成员函数?我正在尝试这样做:
class Second;
class First{
private:
int x=0;
public:
void move(Second* s,int i){
s->setLine(i);
s->called(true);
}
int getX(){return x;}
}
class Second{
private:
int line=2;
bool cal=false;
public:
void setLine(int l){line = l;}
void called(bool b){cal=b}
bool interact(First* f){
if ((f->getX())>3)
return true;
else
return false;
}
}
我的实际问题有点复杂,函数做的事情更多,但我想做的是让这两个 classes 使用彼此的函数并让它们以这种方式交互。有谁知道有没有办法做到这一点?
你可以把First::move
的定义放在class的外面,在Second
的定义之后。只有声明需要出现在 First
.
的定义中
您实际上可以将 First::move
的定义放在 .cpp 文件中,而不是任何 header。
Is it possible to forward declare a class and then use its member functions?
不,不是。在定义 class 之前,您不能访问前向声明的 class 的任何成员、变量、函数、枚举、嵌套类型等。
您需要在定义前向声明class后移动调用前向声明class的成员函数的函数的实现。
class Second;
class First{
private:
int x=0;
public:
void move(Second* s,int i); // Don't define it here.
int getX(){return x;}
};
class Second{
...
};
// Define the function now.
void First::move(Second* s,int i){
s->setLine(i);
s->called(true);
}
下面会为您解决问题,但最好将声明和实现分开。
class Second;
class First{
private:
int x=0;
public:
void move(Second* s,int i); //<- move implementation after Second's declaration
int getX(){return x;}
}
class Second{
private:
int line=2;
bool cal=false;
public:
void setLine(int l){line = l;}
void called(bool b){cal=b}
bool interact(First* f){
if ((f->getX())>3)
return true;
else
return false;
}
};
void First::move(Second* s,int i){
s->setLine(i);
s->called(true);
}
是否可以转发声明一个class然后使用它的成员函数?我正在尝试这样做:
class Second;
class First{
private:
int x=0;
public:
void move(Second* s,int i){
s->setLine(i);
s->called(true);
}
int getX(){return x;}
}
class Second{
private:
int line=2;
bool cal=false;
public:
void setLine(int l){line = l;}
void called(bool b){cal=b}
bool interact(First* f){
if ((f->getX())>3)
return true;
else
return false;
}
}
我的实际问题有点复杂,函数做的事情更多,但我想做的是让这两个 classes 使用彼此的函数并让它们以这种方式交互。有谁知道有没有办法做到这一点?
你可以把First::move
的定义放在class的外面,在Second
的定义之后。只有声明需要出现在 First
.
您实际上可以将 First::move
的定义放在 .cpp 文件中,而不是任何 header。
Is it possible to forward declare a class and then use its member functions?
不,不是。在定义 class 之前,您不能访问前向声明的 class 的任何成员、变量、函数、枚举、嵌套类型等。
您需要在定义前向声明class后移动调用前向声明class的成员函数的函数的实现。
class Second;
class First{
private:
int x=0;
public:
void move(Second* s,int i); // Don't define it here.
int getX(){return x;}
};
class Second{
...
};
// Define the function now.
void First::move(Second* s,int i){
s->setLine(i);
s->called(true);
}
下面会为您解决问题,但最好将声明和实现分开。
class Second;
class First{
private:
int x=0;
public:
void move(Second* s,int i); //<- move implementation after Second's declaration
int getX(){return x;}
}
class Second{
private:
int line=2;
bool cal=false;
public:
void setLine(int l){line = l;}
void called(bool b){cal=b}
bool interact(First* f){
if ((f->getX())>3)
return true;
else
return false;
}
};
void First::move(Second* s,int i){
s->setLine(i);
s->called(true);
}