Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates 如何声明基类中存在的嵌套类的对象 我有一个我不能编译的C++程序: template <class T> class Base { protected: class BaseNode { public: int i; }; protected: typedef void (*functionPointer)(const T &t, void *data); virtual void apply( const functionPointer fn, void *data) const; }; template <class T> class Derived : public Base<T *> { public: typedef void (*functionPointer)(const T *t, void *data); virtual void apply( const functionPointer fn, void *data) const; }; template <class T> void Derived<T>::apply( const functionPointer fn, void *data) const { BaseNode *node ; } int main() { Derived<int > b; } 模板 阶级基础 { 受保护的: 类BaseNode { 公众: int i; }; 受保护的: typedef void(*函数指针)(常量T&T,void*数据); 虚拟void apply(常量函数指针fn,void*数据)常量; }; 模板 派生类:公共基 { 公众: typedef void(*函数指针)(常量T*T,void*数据); 虚拟void apply(常量函数指针fn,void*数据)常量; }; 模板void派生::apply(常量函数指针fn, void*数据)常量 { BaseNode*节点; } int main() { 衍生b; }_Templates_C++11_Nested Class - Fatal编程技术网

Templates 如何声明基类中存在的嵌套类的对象 我有一个我不能编译的C++程序: template <class T> class Base { protected: class BaseNode { public: int i; }; protected: typedef void (*functionPointer)(const T &t, void *data); virtual void apply( const functionPointer fn, void *data) const; }; template <class T> class Derived : public Base<T *> { public: typedef void (*functionPointer)(const T *t, void *data); virtual void apply( const functionPointer fn, void *data) const; }; template <class T> void Derived<T>::apply( const functionPointer fn, void *data) const { BaseNode *node ; } int main() { Derived<int > b; } 模板 阶级基础 { 受保护的: 类BaseNode { 公众: int i; }; 受保护的: typedef void(*函数指针)(常量T&T,void*数据); 虚拟void apply(常量函数指针fn,void*数据)常量; }; 模板 派生类:公共基 { 公众: typedef void(*函数指针)(常量T*T,void*数据); 虚拟void apply(常量函数指针fn,void*数据)常量; }; 模板void派生::apply(常量函数指针fn, void*数据)常量 { BaseNode*节点; } int main() { 衍生b; }

Templates 如何声明基类中存在的嵌套类的对象 我有一个我不能编译的C++程序: template <class T> class Base { protected: class BaseNode { public: int i; }; protected: typedef void (*functionPointer)(const T &t, void *data); virtual void apply( const functionPointer fn, void *data) const; }; template <class T> class Derived : public Base<T *> { public: typedef void (*functionPointer)(const T *t, void *data); virtual void apply( const functionPointer fn, void *data) const; }; template <class T> void Derived<T>::apply( const functionPointer fn, void *data) const { BaseNode *node ; } int main() { Derived<int > b; } 模板 阶级基础 { 受保护的: 类BaseNode { 公众: int i; }; 受保护的: typedef void(*函数指针)(常量T&T,void*数据); 虚拟void apply(常量函数指针fn,void*数据)常量; }; 模板 派生类:公共基 { 公众: typedef void(*函数指针)(常量T*T,void*数据); 虚拟void apply(常量函数指针fn,void*数据)常量; }; 模板void派生::apply(常量函数指针fn, void*数据)常量 { BaseNode*节点; } int main() { 衍生b; },templates,c++11,nested-class,Templates,C++11,Nested Class,当我试图编译它时,我得到以下错误: pankajk[]> g++ sample2.cpp sample2.cpp: In member function 'virtual void Derived<T>::apply(void (*)(const T*, void*), void*) const': sample2.cpp:26: error: 'BaseNode' was not declared in this scope sample2.cpp:26: error: 'n

当我试图编译它时,我得到以下错误:

pankajk[]> g++ sample2.cpp
sample2.cpp: In member function 'virtual void Derived<T>::apply(void (*)(const T*, void*), void*) const':
sample2.cpp:26: error: 'BaseNode' was not declared in this scope
sample2.cpp:26: error: 'node' was not declared in this scope
pankajk[]>g++sample2.cpp
sample2.cpp:在成员函数“virtualvoid-Derived::apply(void(*)(const T*,void*),void*)const”中:
sample2.cpp:26:错误:“BaseNode”未在此作用域中声明
sample2.cpp:26:错误:“节点”未在此作用域中声明
我不熟悉模板的概念,也不知道我做错了什么。

Base
是一个依赖的基类,因此需要使用显式作用域和
typename
关键字:

template <class T> void Derived<T>::apply(const functionPointer fn,
                                                 void           *data) const
{
    typename Base<T *>::BaseNode* node;
//  ~~~~~~~^ ~~~~~~~~^          
}
模板void派生::apply(常量函数指针fn,
void*数据)常量
{
typename Base::BaseNode*节点;
//  ~~~~~~~^ ~~~~~~~~^          
}

语法和措辞的改进