0

システム: Linux コンパイラ: gcc バージョン 4.4.6

プログラムは大学レベルのクラス向けで、提供されたクラスで使用する機能をインストラクターが指定します。ここで変更できるのは 2 つのファイルのみで、講師から提供されたファイルは変更できません。デキュー関数の実装を除いて、プログラムは正しく動作しているようです。フロント、リア、アイテム、カウントにアクセスする必要があります。コンパイラは、それらが範囲外であると言います。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
4

1 に答える 1

0

タイプミスがあります。これ...

Task LinkedQueue::*dequeue()

する必要があります

Task* LinkedQueue::dequeue()

実装がヘッダーにあるものと一致せず、それがクラスの一部であることを認識しないため、これはコンパイラを混乱させました。

編集:さらにitem、どこにも宣言されていませんが、タイプのローカル変数であることを意図していると思いますTask*

于 2013-02-27T06:07:11.437 に答える