C++ C++;如何定义嵌套类中的运算符
我在定义嵌套类中的运算符时遇到了问题,该类也是模板化的。我知道如何在.h文件中声明和定义它,但我想在.h文件中声明它并在.hpp文件中定义它。例如: 清单hC++ C++;如何定义嵌套类中的运算符,c++,class,nested,operator-overloading,C++,Class,Nested,Operator Overloading,我在定义嵌套类中的运算符时遇到了问题,该类也是模板化的。我知道如何在.h文件中声明和定义它,但我想在.h文件中声明它并在.hpp文件中定义它。例如: 清单h template <typename T> class List { public: class const_iterator { //nested class //.... const T & operator*() const; }; }; 模板 班级名单{ 公众
template <typename T>
class List {
public:
class const_iterator { //nested class
//....
const T & operator*() const;
};
};
模板
班级名单{
公众:
类常量迭代器{//嵌套类
//....
常数T&运算符*()常数;
};
};
下面是我不太明白的部分:
List.hpp
#include "List.h"
template <typename T>
typename List <T>::const_iterator & List <T>:: operator*() const //error line
{
//do stuff
}
#包括“List.h”
模板
typename列表::常量迭代器&列表::运算符*()常量//错误行
{
//做事
}
我在line.hpp的第4行收到的错误是:
“运算符*”的行外定义与“列表”中的任何声明都不匹配
我正在寻找一种只涉及修复.hpp文件的解决方案。正如错误所说,您的定义与您的声明不匹配。您已经声明了类
列表::常量迭代器
的成员运算符*
,该类返回常量T&
,但您的定义是针对类列表
的成员运算符*
,该类返回列表::常量迭代器&
类模板的成员函数的定义,无论是否嵌套,都遵循与任何其他函数相同的模式:ReturnType FunctionName(ParameterList)
该声明的适当定义是:
template <typename T>
const T& List<T>::const_iterator::operator*( ) const
//^^^^^^^^ ^
// | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
// Return type | (empty) parameter list
// Function name
{
//...
}
模板
常量T&List::常量迭代器::运算符*()常量
//^^^^^^^^ ^
// | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
//返回类型|(空)参数列表
//函数名
{
//...
}
正如错误所述,您的定义与您的声明不匹配。您已经声明了类列表::常量迭代器
的成员运算符*
,该类返回常量T&
,但您的定义是针对类列表
的成员运算符*
,该类返回列表::常量迭代器&
类模板的成员函数的定义,无论是否嵌套,都遵循与任何其他函数相同的模式:ReturnType FunctionName(ParameterList)
该声明的适当定义是:
template <typename T>
const T& List<T>::const_iterator::operator*( ) const
//^^^^^^^^ ^
// | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
// Return type | (empty) parameter list
// Function name
{
//...
}
模板
常量T&List::常量迭代器::运算符*()常量
//^^^^^^^^ ^
// | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
//返回类型|(空)参数列表
//函数名
{
//...
}
您的.hpp正在尝试定义一个运算符*
,该运算符是列表的成员,并返回对列表::常量迭代器的引用。这不是你的.h声明的。它声明一个操作符*
,该操作符是列表::常量迭代器的成员,并返回对T
的引用
请尝试以下方法:
#include "List.h"
template <typename T>
const T& List<T>::const_iterator::operator*() const
{
//do stuff
}
#包括“List.h”
模板
常量T&List::常量迭代器::运算符*()常量
{
//做事
}
您的.hpp正在尝试定义一个运算符*
,该运算符是列表的成员,并返回对列表::常量迭代器的引用。这不是你的.h声明的。它声明一个操作符*
,该操作符是列表::常量迭代器的成员,并返回对T
的引用
请尝试以下方法:
#include "List.h"
template <typename T>
const T& List<T>::const_iterator::operator*() const
{
//do stuff
}
#包括“List.h”
模板
常量T&List::常量迭代器::运算符*()常量
{
//做事
}
现在,如果我有一个类似于:常量迭代器和运算符++();在.h文件中?现在如果我有一个类似于:const_iterator&operator++();在.h文件中?