在声明从模板类继承的类时发生编译错误:
我不明白派生文件的声明有什么问题。请帮我找到它的问题。 这是我的头文件的内容:在声明从模板类继承的类时发生编译错误:
/*
* STLSandbox.h
*
* Created on: Aug 4, 2012
* Author: aksinghdce
*/
#ifndef STLSANDBOX_H_
#define STLSANDBOX_H_
namespace amit {
class STLSandbox {
public:
STLSandbox();
virtual ~STLSandbox();
};
template<typename T>
class MyCotainer{
public:
virtual void inserthere(T&) = 0;
virtual void deletehere(T&) = 0;
virtual const void printhere(T&) = 0; //promise not to modify anything
};
template<typename T>
class VectorOf: public MyContainer<T>
{
public:
virtual void inserthere(T&);
virtual void deletehere(T&);
virtual const void printhere(T&);
private:
std::vector<T&> v_data; // vector of references of type T
};
template<typename T>
void VectorOf<T>::inserthere(T& item){
v_data.push_back(item);
}
template<typename T>
void VectorOf<T>::deletehere(T& item){
v_data.pop_back(item);
}
template<typename T>
const void VectorOf<T>::printhere(T& item){
std::vector<T>::iterator i = null;
for(i=v_data.begin();i<v_data.end();i++)
{
std::cout<<*i<<std::endl;
}
}
}
#endif /* STLSANDBOX_H_ */
我用gcc 4.2.1
以下是我收到的错误:
[...]/STLSandbox.h:26: error: expected template-name before ‘<’ token
[...]/STLSandbox.h:26: error: expected `{' before ‘<’ token
[...]/STLSandbox.h:26: error: expected unqualified-id before ‘<’ token
[...]/STLSandbox.h:37: error: ‘template<class T> class amit::VectorOf’ used without template parameters
[...]/STLSandbox.h: In function ‘void amit::inserthere(T&)’:
[...]/STLSandbox.h:38: error: ‘v_data’ was not declared in this scope
[...]/STLSandbox.h: At global scope:
[...]/STLSandbox.h:42: error: ‘template<class T> class amit::VectorOf’ used without template parameters
看起来它只是一个错字。您已定义类MyCotainer
(请注意缺少的n),但稍后使用正确的MyContainer
。
你编辑过这个问题,你应该已经修复了这个错字 – 2012-08-05 04:15:53
@Anubis先生我不认为这是合适的,因为它会使问题模拟 – 2012-08-05 04:17:10
谢谢!这样一个愚蠢的错误 – aksinghdce 2012-08-06 19:40:27
忽略其他错误,主要问题是你不能创建ref的向量'std :: vector v_data;',考虑'std :: reference_wrapper向量''如果你正在使用C++ 11 –
2012-08-05 04:21:48