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