Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.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++_Inner Classes - Fatal编程技术网

C++ 如何在模板类中创建内部类的新实例并返回它

C++ 如何在模板类中创建内部类的新实例并返回它,c++,inner-classes,C++,Inner Classes,Outer.h: template<typename T> class Outer { private: class Inner { public: int m_int; T * m_template; Inner(int p_int, const T & p_template); ~Inner(); }; Inner * m_innerList[]; vo

Outer.h:

template<typename T>
class Outer
{
private:

    class Inner
    {
    public:

        int m_int;
        T * m_template;

        Inner(int p_int, const T & p_template);

        ~Inner();
    };
    Inner * m_innerList[];
    void createInner(int value, const T & template);
    Inner * getInner(int p_value) const;
#include "Outer.h"


template<typename T>
void Outer<T>::createInner(int p_value, const T & template) const
{
        Inner * newInner = new Inner(p_value, template);
        m_innerList.add(newInner);
}

template<typename T>
Outer<T>::Inner * Outer<T>::getInner(int p_value) const
{
        for(int i = 0 ; i < nbInner ; i++)
        {
                if(m_innerList[i]->m_int == p_value)
                {
                        return m_innerList[i];
                }
        }
}
模板
类外部
{
私人:
班级内部
{
公众:
int m_int;
T*m_模板;
内部(int p_int,常量T&p_模板);
~Inner();
};
内部*m_内部列表[];
void createInner(int值、常量和模板);
内部*getInner(int p_值)常量;
Outer.cpp:

template<typename T>
class Outer
{
private:

    class Inner
    {
    public:

        int m_int;
        T * m_template;

        Inner(int p_int, const T & p_template);

        ~Inner();
    };
    Inner * m_innerList[];
    void createInner(int value, const T & template);
    Inner * getInner(int p_value) const;
#include "Outer.h"


template<typename T>
void Outer<T>::createInner(int p_value, const T & template) const
{
        Inner * newInner = new Inner(p_value, template);
        m_innerList.add(newInner);
}

template<typename T>
Outer<T>::Inner * Outer<T>::getInner(int p_value) const
{
        for(int i = 0 ; i < nbInner ; i++)
        {
                if(m_innerList[i]->m_int == p_value)
                {
                        return m_innerList[i];
                }
        }
}
#包括“Outer.h”
模板
void Outer::createInner(int p_值、常量T和模板)常量
{
内部*新内部=新内部(p_值,模板);
m_innerList.add(newInner);
}
模板
外部::内部*外部::获取内部(int p_值)常量
{
对于(int i=0;im_int==p_值)
{
返回m_innerList[i];
}
}
}

代码不完整,但我的主要问题是,我似乎无法在“Outer.cpp”内创建“Inner”类的新实例,也无法返回“Inner”类的实例

我想我对“Outer::”路径有一些问题,或者它可能与“Outer.h”中的private相关,但我还没有找到有效的解决方案


感谢您的帮助!

“Outer.cpp”您知道,如果在cpp文件中而不是在标题中提供类模板成员函数/函数模板的定义,您将遇到麻烦:“我无法创建新实例”-到底是什么阻止了您?您是否遇到编译器错误,如果是,错误消息是什么?您是否遇到其他症状,如果是,哪些症状?
getInner
声明需要
typename
,如
模板typename Outer::Inner*Outer::getInner(int p_值)const{…}
。其余部分对我来说基本上没问题,事实上,简化版本并不是唯一的问题。当您尝试将代码与此内容链接时,您将遇到另一个完全不同的问题,因为编写时编译
Outer.cpp
,不会生成实际的操作代码。如果您在
Outer中的某个地方显式实例化.cpp
它仍然可以工作,但我看不到您在这段代码中这样做。谢谢@IgorTandetnik!我只需要在我的功能前面添加typename就可以了!