我有这个代码,它编译成功。
#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;
}
答案 0 :(得分:1)
在Expression
课程中使用 ConstExpression
,但ConstExpression
尚未宣布。
您可以在ConstExpression
使用前通过转发声明克服此问题:
template<typename T>
class ConstExpression;
template<typename T>
class Expression { ... };