如何使用稍后在前面定义的类X中的代码中定义的类Y?

时间:2013-11-29 06:53:12

标签: c++ class

我有这个代码,它编译成功。

#include <iostream>
#include <memory>
template <typename T>
class Expression {
    public:
    T _data;

    Expression() {}

    Expression(T data) {
        _data = data;
    }
    void foo();
};



template <typename T>
class ConstExpression : public Expression<T> {
    public:
    ConstExpression() {}
    ConstExpression(T data) {
        this->_data = data;
    }
};


template <typename T>
void Expression<T>::foo() {
    std::shared_ptr<ConstExpression<T>> temp(new Expression);
    std::shared_ptr<ConstExpression<T>> temp2(new ConstExpression<T>());
    ConstExpression<T> foo2(5);
}

int main() {
    return 0;
}

现在如果我执行以下操作或者给我的函数foo输入constexpression类型的输入参数我得到一个错误:main.cc:15:25:错误:使用未声明的标识符&#39; ConstExpression&#39 ;;你的意思是&#39;表达&#39;? 在我的真实代码中,我的函数接受一个类型为ConstExpression的输入参数,我也做了一个out-line声明,但是得到了类似的错误。

#include <iostream>
#include <memory>
template <typename T>
class Expression {
    public:
    T _data;

    Expression() {}

    Expression(T data) {
        _data = data;
    }
    void foo() {
        std::shared_ptr<ConstExpression<T>> temp(new Expression);
        std::shared_ptr<ConstExpression<T>> temp2(new ConstExpression<T>());
        ConstExpression<T> foo2(5);
    }
};



template <typename T>
class ConstExpression : public Expression<T> {
    public:
    ConstExpression() {}
    ConstExpression(T data) {
        this->_data = data;
    }
};

int main() {
    return 0;
}

1 个答案:

答案 0 :(得分:1)

Expression课程中使用 ConstExpression,但ConstExpression尚未宣布。

您可以在ConstExpression使用前通过转发声明克服此问题:

template<typename T>
class ConstExpression;

template<typename T>
class Expression { ... };