Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/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
C++ C++;模板-类内结构_C++_Templates - Fatal编程技术网

C++ C++;模板-类内结构

C++ C++;模板-类内结构,c++,templates,C++,Templates,对于以下代码,我在实现行得到一个编译错误,如下所示: “B不定义类型”。 我知道将函数定义放在类声明中的解决方案。但是,是否可以将函数定义从模板类声明中删除?谢谢 template<typename T> class A { public: // ctor, dtor and interface funcs etc private: struct B { T value; B *next; }

对于以下代码,我在实现行得到一个编译错误,如下所示: “B不定义类型”。 我知道将函数定义放在类声明中的解决方案。但是,是否可以将函数定义从模板类声明中删除?谢谢

template<typename T>
class A {
    public:
        // ctor, dtor and interface funcs etc

   private:
     struct B {
          T value;
          B *next;
     }

     B *locate(const T& val) const;

     // blah blah
};

template<typename T>
B *A<T>::locate(const T& val) const
{
    //logic
}
模板
甲级{
公众:
//ctor、dtor和接口函数等
私人:
结构B{
T值;
B*下一步;
}
B*定位(常数T&val)常数;
//废话
};
样板
B*A::定位(常数T&val)常数
{
//逻辑
}

既然
B
是在
A
中定义的,您应该用
A::
来限定它:

template<typename T>
typename A<T>::B *A<T>::locate(const T& val) const
{
    //logic
}
模板
typename A::B*A::locate(const T&val)const
{
//逻辑
}

另请注意,
typename
是必需的,因为
B
是一个从属名称。

因为
B
是在
a
中定义的,您应该用
a:::
对其进行限定:

template<typename T>
typename A<T>::B *A<T>::locate(const T& val) const
{
    //logic
}
模板
typename A::B*A::locate(const T&val)const
{
//逻辑
}

另外请注意
typename
,这是必需的,因为
B
是一个从属名称。

谢谢,您很合适。“typename”是我遗漏的。确认冯登是正确的;这有助于我在嵌套类模板中的其他类或结构时更好地理解模板。谢谢,您的支持。“typename”是我遗漏的。确认冯登是正确的;这有助于我在类模板中嵌套其他类或结构时更好地理解模板。