我想写一个多项式类,每个多项式由多个poly组成,我已用数组实现它,如下代码:
class polynomial {
private:
int count;
public:
polynomial() {
count = 0;
Term terms[10];
}
void create(int c) {
terms[count].coef = c;
}
};
class Term {
public:
double coef;
int expo;
};
我在create方法中遇到问题,它不知道术语数组,也不访问Term对象属性。为什么会这样?
答案 0 :(得分:1)
您需要在使用之前声明一个类。所以交换Term和多项式类,它应该编译得很好。请参阅以下示例:
int main(){
Foo foos[10];
}
class Foo {
};
// In function 'int main()':
// error: 'Foo' was not declared in this scope
class Foo {
};
int main(){
Foo foos[10];
}
// compiles fine
答案 1 :(得分:1)
探索“前瞻性宣言”方法。在方法中使用Term类之前,需要先设置一个前向声明。这只是因为当您编译Polynomial类时,编译器不知道什么是Term,当您转发声明时,编译器会向前移动,期望它稍后会得到Term的定义。
class Term;
class Polynomial{
..
..
};
class Term{
..
..
};
或者反过来声明在Polynomial类之前的类Term。
答案 2 :(得分:1)
// First declare a class that will be referenced
class Term {
public:
double coef;
int expo;
};
class polynomial {
private:
int count;
// terms should be a class member not a local of constructor
Term terms[10];
public:
polynomial() {
count = 0;
// If you declare terms array here
// it will be destroy after returns from constructor
// Term terms[10];
}
void create(int c) {
terms[count].coef = c;
}
};
如果术语声明之前的多项式声明是您的前向声明的要求,则可以用作:
class Term;
class polynomial { ... };
class Term { // Real declaration here };
但它并没有在构造函数中撤消错误的terms
定义而不是类成员。