我有这段代码,它可以成功编译。

#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:错误:使用未声明的标识符'ConstExpression';你是说“表达”吗?
在我的真实代码中,我的函数采用了ConstExpression类型的输入参数,并且我也进行了脱机声明,但遇到了类似的错误。
#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;
}

最佳答案

Expression类中,您使用ConstExpression,但尚未声明ConstExpression

您可以通过在使用ConstExpression之前声明它来克服此问题:

template<typename T>
class ConstExpression;

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

关于c++ - 如何在较早定义的类X内的代码中使用较晚定义的类Y?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20279968/

10-10 14:39