gpt4 book ai didi

linux - 链表队列的出队函数中使用函数指针的问题

转载 作者:太空宇宙 更新时间:2023-11-04 04:18:11 25 4
gpt4 key购买 nike

系统:Linux编译器:gcc版本4.4.6

程序适用于大学级别的类(class),其中讲师指定了所提供类(class)中要使用的函数。我只能更改此处的两个文件,而不能更改讲师提供的任何文件。除了我对出列函数的实现之外,该程序似乎运行正常。我需要访问前面、后面、项目和计数。编译器说它们超出了范围。我能够从 cpp 文件中的其他函数访问它们,但由于该函数使用的方法不同,我被难住了。据我所知,这是一个函数指针。我以前从未使用过这些,我能找到的关于它们的唯一文档是如何使用它们,但没有任何关于如何从函数外部访问未发送的成员的信息。对此的任何帮助将不胜感激。我已经为此工作了好几天,但无法决定如何解决这个问题。

////////////////////////////////////////////////////////////////////////////////////////////

//My.h
#ifndef __LINKEDQUEUE_H__
#define __LINKEDQUEUE_H__

#include <ostream>
#include <stdint.h>
#include "task.h"
#include "queueExceptions.h"

#include <string>
#include <new>
#include "queue.h"

/*class QueueEmpty
{};

class QueueFull
{};
*/

typedef Task* ItemType;


struct NodeType {
ItemType info;
NodeType* next;
};

class LinkedQueue: public Queue
{
public:
int count;
NodeType* front;
NodeType* rear;


LinkedQueue();

~LinkedQueue();

/**
* Enqueue a task onto the queue
* @param tsk The task to enqueue
* @throws QueueFull if there is not room on the queue to place the item.
*/
void enqueue(Task *tsk) throw (QueueFull);

/**
* Dequeue an element from the queue.
* @return the front of the queue.
* @throws QueueEmpty if there are no elements in the queue.
*/
Task *dequeue() throw (QueueEmpty);

/**
* Retrieve the current number of items on the queue.
* @return the current number of items on the queue.
*/
size_t depth() const;


};
#endif // __LINKEDQUEUE_H__

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//my.cpp

#include <iostream>
#include <string>
#include "linkedQueue.h"

using namespace std;

LinkedQueue::LinkedQueue()
{
front = NULL;
rear = NULL;
count = 0;
}

/**
* Enqueue a task onto the queue
* @param tsk The task to enqueue
* @throws QueueFull if there is not room on the queue to place the item.
*/
void LinkedQueue::enqueue(Task *tsk) throw (QueueFull)
{
NodeType* newNode;
newNode = new NodeType;
if (newNode == NULL)
{
throw QueueFull();
}
else
{
newNode->info = tsk;
newNode->next = NULL;
if (rear == NULL)
front = newNode;
else
rear->next = newNode;
rear = newNode;
count++;
}
}
/**
* Dequeue an element from the queue.
* @return the front of the queue.
* @throws QueueEmpty if there are no elements in the queue.
*/
Task LinkedQueue::*dequeue() throw (QueueEmpty)
{
if (front == NULL) {throw QueueEmpty();}
else
{
NodeType* tempPtr;
tempPtr = front;
item = front->info;
front = front->next;
if (front == NULL)
rear = NULL;
delete tempPtr;
LinkedQueue::count--;
return item;

}
}

/**
* Retrieve the current number of items on the queue.
* @return the current number of items on the queue.
*/
size_t LinkedQueue::depth() const
{
return count;
}

LinkedQueue::~LinkedQueue()
{
NodeType* tempPtr;
while (front != NULL)
{
tempPtr = front;
front = front->next;
delete tempPtr;
}
rear = NULL;
}

////////////////////////////////////////////////////////////////////////////////////////////

compile errors:
g++ -g -o linkedQueue.o -Wall -Werror -c linkedQueue.cpp
linkedQueue.cpp: In function ‘Task LinkedQueue::* dequeue()’:
linkedQueue.cpp:46: error: ‘front’ was not declared in this scope
linkedQueue.cpp:51: error: ‘item’ was not declared in this scope
linkedQueue.cpp:54: error: ‘rear’ was not declared in this scope
linkedQueue.h:31: error: invalid use of non-static data member ‘LinkedQueue::count’
linkedQueue.cpp:56: error: from this location
make: *** [linkedQueue.o] Error 1

最佳答案

你打错字了。这...

Task LinkedQueue::*dequeue()

应该是

Task* LinkedQueue::dequeue()

这让编译器感到困惑,因为实现与 header 中的内容不匹配,并且它不知道它是类的一部分。

编辑:此外 item 没有在任何地方声明,但我认为它应该是 Task* 类型的局部变量

关于linux - 链表队列的出队函数中使用函数指针的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15105262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com