Arduino 错误:ISO C++禁止声明无类型的'LinkedListItem'
Arduino error: ISO C++ forbids declaration of 'LinkedListItem' with no type
我在尝试为Arduino编写程序时出错。我是C++的新手,所以这可能是我所缺少的简单而明显的东西。我试图创建一个简单的模板链接列表,但一直遇到问题。在我的写生本中,我在自己的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;
如有任何帮助,我们将不胜感激。
您可能指的是std中的"string"而不是"string"。更改后,它将编译。请参阅下面的工作代码。
#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中相应的链表,除非您有尚未提及的特定要求。
我不能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文件。
相关文章:
- ArduinoJson 6.15.2:JsonObject没有命名类型
- 防止主数据类型C++的隐式转换
- 大量序列中核苷酸类型的快速计数
- 如何从C++中的依赖类型中获得它所依赖的类型
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如何获取std::result_of函数的返回类型
- 从父命名空间重载类型
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 访问者访问变体并返回不同类型时出错
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 模板元程序查找相似的连续类型名称
- 是否可以从int转换为enum类类型
- 构造函数正在调用一个使用当前类类型的函数
- 我应该使用什么来代替void作为变体中的替代类型之一
- 类中的字符串不命名类型