我有这段代码,它编译成功。
#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/