我在尝试安排项目文件C ++时遇到了问题
我只是设计一个特定的模板类Mystackt,我希望将整个类包含在Mystackt的公共部分中作为迭代器类MyIterator {}; 我在头文件MyTemplate.h中写了所有这些东西 如此简短,它将显示如下
template <class Type> /* that's in file **MyTemplate.h** */
class MyStackt
{
friend somefunction (int,string,bool);
public:
class iterator
{
public:
iterator();
void somefunc(param1,param2.....);
void otherfunc(...);
private:
Type* ptr;
};
int public_func_of_stackt(void);
void an-otherfunc(int,string,Type,...etc);
private:
int x;
string y;Type* val;
};
现在让我们看一下这个标题MyTemplate.cpp的cpp文件 我可以毫无问题地包含Mytemplate类的所有成员函数的代码 例如:
template <class Type>
int MyStack<Type>::public_func_of_stackt(void) /*this works perfect*/
{implementation goes here ...;}
但是当我试图编写整个类(迭代器类)的成员函数的实现时,问题就开始了
template <class Type>
bool MyStackt<Type>::iterator somefunc(param1,param2.....)
{ return current ==rhs.current; }
问题先生是: 我如何在Mytemplate.cpp文件中包含我的代码用于类迭代器的成员函数?我应该如何使用外部::整个或其他特定符号来编写? 其他问题: 我如何编写(在Mytemplate.cpp文件中)MyStackt类的友元函数的实现?
更新#1:谢谢Veritas
但我还需要知道如何定义MyStackt类的一些公共函数 如果该函数返回迭代器类型(因此它返回整个类的对象)
定义看起来像那样
template <class Type>
iterator Stackt<Type>::begin()
{ return *this; } /*this function did not work*/
也许我需要使用一些特定的符号4?如果我有多个嵌套类怎么办? 等待专家的回答 提前谢谢你!
答案 0 :(得分:1)
在定义somefunc时忘记了范围解析运算符。定义应该是:
template <class Type>
bool MyStackt<Type>::iterator::somefunc(param1,param2.....)
{
return current == rhs.current;
}
对于友元函数,您可以像任何其他全局函数一样定义它。
进行编辑:
迭代器类属于MyStackt的范围,因此无论何时需要从MyStackt中提及它,都需要使用范围运算符。至于你的问题,我不确定你要做什么。 *这将返回MyStackt类型的实例化对象。
还要小心!如果要分离定义,请使用.inl文件或类似文件,而不是cpp文件。