我正在Stack
为数据存储创建一个新类,它使用我的Array
类作为数据成员。我仍在设置构造函数并遇到赋值运算符的问题。
当我调用我的赋值运算符时,它会连续调用,直到我手动取消程序。
你能帮我找出错误吗?
Array
如有必要,我可以为该类提供代码,但我认为该错误应该包含在下面的某个地方。
相关代码如下:
堆栈头代码:
#ifndef STACK_HPP
#define STACK_HPP
#include "Array_H.hpp"
namespace CLARK{
namespace Containers{
template <class Type=T> class Stack
{
private:
int m_current;
Array<Type> m_array;
public:
// constructors and destructors:
Stack(); // default constructor
// ...
~Stack(); // destructor
// ...
// modifiers:
// overloaded operator functions:
Stack<Type>& operator = (const Stack<Type>& source); // assignment operator
};
}
}
#ifndef STACK_CPP
#include "Stack.cpp"
#endif
#endif
堆栈源代码:
#ifndef STACK_CPP
#define STACK_CPP
#include "Stack_H.hpp"
namespace CLARK{
namespace Containers{
// constructors and destructors:
template <class Type>
Stack<Type>::Stack() : m_array(Array<Type>()) , m_current(0)
{ // default constructor
cout << "Stack constructor call (default)" << endl;
}
// ...
template <class Type>
Stack<Type>::~Stack()
{ // destructor
cout << "Stack destructor call" << endl;
}
// ...
// modifiers:
// overloaded operator functions:
template <class Type>
Stack<Type>& Stack<Type>::operator = (const Stack<Type>& source)
{// assignment operator
cout << "Stack assignment operator call" << endl;
if (this == &source)
return *this;
this->Stack<Type>::operator = (source);
m_current = source.m_current;
m_array = source.m_array;
return *this;
}
}
}
#endif STACK_CPP
测试代码:
#include "Point_H.hpp"
#include "Line_H.hpp"
#include "Circle_H.hpp"
#include "Array_H.hpp"
#include "NumericArray_H.hpp"
#include "Stack_H.hpp"
#include "PointArray_H.hpp"
#include "ArrayException_H.hpp"
#include "OutOfBoundsException_H.hpp"
using namespace CLARK::Containers;
using namespace CLARK::CAD;
int main()
{
try
{
Stack<int> testStack; // test default constructor
Stack<int> testStack2;
testStack2 = testStack; // test assignment operator
return 0;
} catch(ArrayException& err) {
cout << err.GetMessage() << endl;
}
}
输出如下所示:
数组构造函数调用(默认)
堆栈构造函数调用(默认)
数组构造函数调用
堆栈构造函数调用
数组构造函数调用(默认)
堆栈构造函数调用(默认)
堆栈赋值运算符调用
堆栈赋值运算符调用
堆栈赋值运算符调用
堆栈赋值运算符调用
堆栈赋值运算符调用
堆栈赋值运算符调用
堆栈赋值运算符调用[无限重复,直到我取消它]
谢谢。