2015-04-13 5 views
1

Я пытаюсь написать простой связанный список и пытаюсь выбросить исключение out_of_range, когда пользователь хочет, чтобы индекс узла был вне пределов. Однако, когда я компилирую исходный файл, я получаю сообщение об ошибке «out_of_range» не является членом «std».Exception 'out_of_range' не является членом std?

Было мое понимание, что 'out_of_range' Является членом std ::, поэтому я предполагаю, что я делаю что-то неправильно, о чем я не знаю.

Вот где происходит ошибка:

T getValueAtIndex (int index) 
     { 
      // If the index is less than 0 or greater than/equal to 
      // the length, throw index out-of-bounds exception. 
      if (index < 0 || index >= length) 
      { 
       throw std::out_of_range ("Index out of bounds."); 
      } 
      else 
      { 
       // Start at index 0. 
       int i = 0; 
       // Start with the first node in the list (headNode). 
       Node * currentNode = headNode; 
       // While we have not yet reached the index we want... 
       while (i < index) 
       { 
        currentNode = currentNode->getNextNode(); 
        i++; 
       } 
       return currentNode->getValue(); 
      } 
     } 

А вот весь файл до сих пор (пока не завершен):

#include <iostream> 

template <typename T> 
class LinkedList 
{ 
    // Private variables/information. 
    private: 
     // Struct 'Node' which holds the data and a pointer to the next 
     // node in the linked-list. 
     struct Node { 
      T value; 
      Node * nextNode; 
      // Node constructor, sets nextNode to NULL. 
      Node() 
      { 
       nextNode = NULL; 
      } 
      // Sets the value of this node to the value passed to it. 
      void setValue (T Value) 
      { 
       value = Value; 
      } 
      void setNextNode (Node * newNode) 
      { 
       nextNode = newNode; 
      } 
      // Returns the value of this node. 
      T getValue() 
      { 
       return value; 
      } 
      // Returns a pointer to the next node in the list. 
      Node * getNextNode() 
      { 
       return nextNode; 
      } 
     }; 
     // The head or 'first' node in the list. 
     Node * headNode; 
     // The tail or 'last' node in the list. 
     Node * tailNode; 
     // Length of the list. Useful for making sure we 
     // do not search for a node index that is out of bounds. 
     int length; 
    // Public methods. 
    public: 
     // Default constructor for the linked list. 
     // Initializes the two nodes to NULL. 
     LinkedList() 
     { 
      headNode = NULL; 
      tailNode = NULL; 
      length = 0; 
     } 
     // Adds a value to the linked-list as a node. 
     void add (T Value) 
     { 
      // Create a new node on the heap. 
      Node newNode = new Node(); 
      // Set the value of this new node to the value specified. 
      newNode.setValue(Value); 

      // If there is no node in the list yet... 
      if (headNode == NULL) 
      { 
       // Point headNode and tailNode to the address of newNode. 
       headNode = &newNode; 
       tailNode = &newNode; 
      } 
      // Else if there is already a node in the list. 
      else 
      { 
       // Link the new node to the last current node. 
       tailNode->setNextNode(&newNode); 
       // Set the last node to the new node. 
       tailNode = &newNode; 
      } 

      // Increase the length of the list by one. 
      length++; 
     } 
     // Returns the value of the node at the given index. 
     // Starts at index 0 like a normal array. 
     T getValueAtIndex (int index) 
     { 
      // If the index is less than 0 or greater than/equal to 
      // the length, throw index out-of-bounds exception. 
      if (index < 0 || index >= length) 
      { 
       throw std::out_of_range ("Index out of bounds."); 
      } 
      else 
      { 
       // Start at index 0. 
       int i = 0; 
       // Start with the first node in the list (headNode). 
       Node * currentNode = headNode; 
       // While we have not yet reached the index we want... 
       while (i < index) 
       { 
        currentNode = currentNode->getNextNode(); 
        i++; 
       } 
       return currentNode->getValue(); 
      } 
     } 
}; 

int main() 
{ 


    return 0; 
} 

Что я делаю неправильно, когда бросать исключение? Я пробовал без «std ::», в том числе, и с «новым» спереди.

+1

Это _so_ далеко от _minimal_ TestCase, дружище ... :( –

+0

я понял, что это было, вероятно, более сложным, чем это должно быть ... мой код, как правило, когда я пробую что-то новое. :( – Qwurticus

+0

Хорошо, но это как раз и причина для составления минимального теста! –

ответ

13

Похоже, вы просто забыли #include <stdexcept>

+0

Спасибо, не понимал, что мне это нужно (глупо мне). Я приму ваш ответ за 9 минут, когда StackOverflow Позволяет мне. <. < – Qwurticus

Смежные вопросы