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

标签 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: error: use of undeclared identifier 'ConstExpression';您指的是 'Expression'? 在我的真实代码中,我的函数接受了一个 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/

相关文章:

c++ - 多个输入验证约束? C++

c++ - 为引用成员变量提供默认值

C++ 内部类不编译

c++ - linux下的Boost Semaphores和EINTR返回码

c++ - 个别动态分配的极端内存使用

在 char* 数组中查找 char* 类型的 c++ 程序

c++ - 在文件之间共享静态变量: namespace 与类

c++ - 为什么在初始化 std::vector 时不能使用模板整数?

android - 在抽象类中获取应用上下文

c++ - map 中的字符串是如何存储的?