C++ 如何在模板类中创建内部类的新实例并返回它
Outer.h: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
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就可以了!