我在尝试为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;
非常感谢任何帮助。
答案 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文件时,我无法使用我的代码。