我有一个ID3类和一个Tree类。类树的对象在ID3中使用,并显示未声明树的错误。
代码看起来像
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <math.h>
#include <vector>
using namespace std;
class ID3 {
public:
string v[];
int x;
public:
double Hi(Tree data)
{
int y=x-1;
}
};
class Tree{
Tree();
}
答案 0 :(得分:6)
在Tree
中使用之前,您需要转发声明ID3
,否则编译器不知道Tree
是什么:
class Tree;
class ID3 {
...
如果您需要在某处使用Tree
的实例,那么您需要在此之前获得Tree
的完整定义,例如:
class Tree {
Tree();
};
class ID3 {
...
double Hi(Tree data) {
// do something with 'data'
int y=x-1;
}
};
有关何时使用前向声明的详细信息,请参阅this Q&A。
答案 1 :(得分:2)
通常,C ++是从上到下编译的。因此,如果类ID3需要类Tree,则必须在ID3之前定义Tree。只需将类树放在ID3之前,就可以了。
答案 2 :(得分:0)
Tree
的前进减速将完成工作。在Tree instance
中使用ID3
时,编译器对Tree
类一无所知,编译过程从上到下。