我在为我实现的队列类设置示例测试时遇到了一些问题。
这是队列类:
Queue.h:
typedef float QueueInfoType;
QueueInfoType x;
class Queue
{
public:
Queue(){front = rear = count = 0;}
bool isEmpty();
bool isFull();
void add(QueueInfoType x);
float remove();
int numItems();
enum {MAXQUEUE = 80};
private:
QueueInfoType values[MAXQUEUE];
int front, rear, count;
};
Queue.cpp:
bool Queue::isEmpty()
{
return front == rear;
}
bool Queue::isFull()
{
return count >= MAXQUEUE;
}
void Queue::add(QueueInfoType x)
{
values[rear = (rear + 1) % MAXQUEUE] = x;
count = count + 1;
}
float Queue::remove()
{
count = count - 1;
return x = values[front = (front + 1) % MAXQUEUE];
}
int Queue::numItems()
{
return count;
}
测试方法:
[TestMethod]
void TestNumItems()
{
Queue q;
for(int i = 0; i < 20; i++)
{
q.add(i);
}
int expected = 2;
int actual = q.numItems();
Assert::AreEqual(expected, actual, "queue had: " + actual + " items");
};
我显然遗漏了一些东西,当我调用add方法将一个项目添加到队列时,我对队列的计数从不递增,但是项目被添加到队列中。
我正在静态库中编译我的队列类,并在我的测试项目中添加对它的引用。
为什么我的队列计数永远不会改变的任何想法?
修改
我正在使用此类创建一个循环队列,该队列具有由MAXQUEUE定义的最大项目数。
以上是QueueInfoType的定义方式。
注意:
当我将静态库更改为可执行文件并将void main()
添加到我的queue.cpp并编写代码来测试队列的函数时,它运行正常并且计数返回正常。当它被测试项目用作静态库时会发生什么吗?
答案 0 :(得分:0)
我不确定,但是必须使用指针实现队列类,所以没有大小限制,你也可以在add函数中使用类似的东西:
void Queue::add(QueueInfoType x)
{
count++;
values[count] = x;
}
因此,实施更容易理解,而且关于你的错误......我找不到它,它可能有用......我会继续思考。
PD:抱歉我的英文答案 1 :(得分:0)
我认为你的预期应该是“20”。
另外,remove正在返回一个“float”,但它应该是一个QueueInfoType。
我运行测试并且工作正常(除了测试20 vs 2)。我的考试实际是20分。
此外,删除中“x =”的分配似乎不正确。
答案 2 :(得分:0)
尝试将测试例程中的for循环更改为:
for(int i = 0; i < 20; i++)
{
q.add(i + 100);
}
如果您最终得到一个不同的数字,那么它是因为您不小心超出了阵列并损坏了堆栈。由于变量的定义方式,它们可能最终成为堆栈上的邻居。