为什么在同一个类中看不到数组?

时间:2014-04-24 07:26:50

标签: c++ arrays

我想写一个多项式类,每个多项式由多个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对象属性。为什么会这样?

3 个答案:

答案 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定义而不是类成员。