// The following operator++() represents overloading of pre-increment
MyIncrDecrClass& operator++()
{
++this->m_nCounter;
return *this;
}
// Passing dummy int argument is to mention overloading of post-increment
MyIncrDecrClass& operator++(int)
{
this->m_nCounter++;
return *this;
}
所以这就是post和pre increment运算符的实现方式,但在我的情况下我不能真正实现它,所以这就是我所做的:
VLongInt& VLongInt::operator++()
{
... //BUILD TEMP vector
this->vec = temp;
return *this;
}
VLongInt& VLongInt::operator++(int)
{
this->vec = this.vec; //seems unnecessary
... //BUILD TEMP vector
this->vec = temp
return *this;
}
有什么不对吗?似乎两者都应该以同样的方式实现。只有头文件应该不同,对吗?
答案 0 :(得分:2)
你的后增量运算符重载的例子是错误的。
的Intsead
// Passing dummy int argument is to mention overloading of post-increment
MyIncrDecrClass& operator++(int)
{
this->m_nCounter++;
return *this;
}
应该有
// Passing dummy int argument is to mention overloading of post-increment
MyIncrDecrClass operator ++( int )
{
MyIncrDecrClass tmp( *this );
++this->m_nCounter;
return tmp;
}
另外你的问题完全不清楚。你实际上定义了两次相同的算子
VLongInt& VLongInt::operator++()
{
//...
return *this;
}
VLongInt& VLongInt::operator++()
{
//...
return *this;
}
我没有看到差异。此外,您没有显示您的课程定义,结果没有任何关于您的问题的说法。这是未知的。
至少你自己说过你的postincrement运算符应该用int
类型的伪参数声明。它必须返回一个临时对象。
VLongInt VLongInt::operator ++( int )
或
const VLongInt VLongInt::operator ++( int )
答案 1 :(得分:0)
有什么不对吗?
是的,您的代码违反了ODR(一个定义规则)。其在第3.2 / 1节中定义为:
任何翻译单元都不得包含任何变量,函数,类类型,枚举类型或模板的多个定义。
您应该改为定义这两个函数:
VLongInt& VLongInt::operator++();
const VLongInt VLongInt::operator++(int);
具体来说,请注意,后增量运算符应返回const T
或T
(T
为您的类类型)。