Arduino错误:ISO C ++禁止声明'LinkedListItem'没有类型

时间:2013-08-24 04:01:36

标签: c++ arduino

我在尝试为Arduino编写程序时遇到错误。我是C ++的新手,所以这很简单,很明显,我很想念。我试图创建一个简单的模板化链表但仍然遇到问题。我在Sketchbook中的ino文件中声明了以下内容。当我尝试使用LinkedListItem类时,我收到以下错误。即使我删除了模板,我仍然会得到同样的错误。

error: ISO C++ forbids declaration of 'LinkedListItem' with no type
LinkedList:9: error: expected ';' before '<' token

代码:

template <class T>
class LinkedListItem {

  public:
    LinkedListItem(T value);
    T getValue();
    LinkedListItem<T>* getPreviousItem();
    void setPrevious(LinkedListItem<T>* previous);
    LinkedListItem<T>* getNextItem();
    void setNext(LinkedListItem<T>* next);

  private:
    LinkedListItem<T>* _previous;
    LinkedListItem<T>* _next;
    T _value;
};

template <class T>
LinkedListItem<T>::LinkedListItem(T value) {
  _value = value;
}

template <class T>
T LinkedListItem<T>::getValue() {
  return _value;
}

template <class T>
LinkedListItem<T>* LinkedListItem<T>::getPreviousItem() {
  return _previous;
}

template <class T>
void LinkedListItem<T>::setPrevious(LinkedListItem<T>* previous) {
  _previous = previous;
}

template <class T>
LinkedListItem<T>* LinkedListItem<T>::getNextItem() {
  return _next;
}

template <class T>
void LinkedListItem<T>::setNext(LinkedListItem<T>* next) {
  _next = next;
}

我正在声明一个指向LinkedListItem的指针,如下所示:

LinkedListItem<String>* _list;

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

你可能的意思是“字符串”而不是标准字符串中的“字符串”。在更改之后,它会编译。请参阅下面的工作代码。

#include <string>

using namespace std;

template <class T>
class LinkedListItem {

  public:
    LinkedListItem(T value);
    T getValue();
    LinkedListItem<T>* getPreviousItem();
    void setPrevious(LinkedListItem<T>* previous);
    LinkedListItem<T>* getNextItem();
    void setNext(LinkedListItem<T>* next);

  private:
    LinkedListItem<T>* _previous;
    LinkedListItem<T>* _next;
    T _value;
};

template <class T>
LinkedListItem<T>::LinkedListItem(T value) {
  _value = value;
}

template <class T>
T LinkedListItem<T>::getValue() {
  return _value;
}

template <class T>
LinkedListItem<T>* LinkedListItem<T>::getPreviousItem() {
  return _previous;
}

template <class T>
void LinkedListItem<T>::setPrevious(LinkedListItem<T>* previous) {
  _previous = previous;
}

template <class T>
LinkedListItem<T>* LinkedListItem<T>::getNextItem() {
  return _next;
}

template <class T>
void LinkedListItem<T>::setNext(LinkedListItem<T>* next) {
  _next = next;
}

int main()
{
    LinkedListItem<string>* _list;
    return 0;
}

此外,这不是典型的实现链表。此外,您可以使用std中相应的链接列表,除非您有一个尚未提及的特定要求。

答案 1 :(得分:0)

我不是100%确定实际解决了我的问题,但我最终将我的LinkedList类移动到Arduino / libraries目录中的自己的头文件中。我将类声明和实现拆分为单独的.h和.cpp文件,但这要求我包含这两个文件以使我的代码正常工作。所以,我把它们放回一个.h文件中。我在QueueList库http://playground.arduino.cc/Code/QueueList之后对我的类进行了建模。

对于在Arduino上遇到类似问题的任何人,我建议您创建自己的库。有关详细信息,请参阅http://arduino.cc/en/Hacking/LibraryTutorial。如上所述,除非我同时包含.h和.cpp文件,否则在拆分为单独的.h和.cpp文件时,我无法使用我的代码。