I have this code and it compiles successfully.
#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;
}
Now if I do the following or give my function foo an input argument of type constexpression I get an error: main.cc:15:25: error: use of undeclared identifier 'ConstExpression'; did you mean 'Expression'? In my real code my function takes an input argument of type ConstExpression and I have done an out of line declaration too but get a similar error.
#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;
}