Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Arduino错误:ISO C++;禁止声明';LinkedList&x27;没有类型_C++_Arduino - Fatal编程技术网

C++ Arduino错误:ISO C++;禁止声明';LinkedList&x27;没有类型

C++ Arduino错误:ISO C++;禁止声明';LinkedList&x27;没有类型,c++,arduino,C++,Arduino,尝试为Arduino编写程序时出错。我是C++新手,所以这很简单,我很清楚。我试图创建一个简单的模板链接列表,但一直遇到问题。我在sketchbook中自己的ino文件中声明了以下内容。当我尝试使用LinkedListItem类时,出现以下错误。即使我删除了模板,我仍然会得到同样的错误 error: ISO C++ forbids declaration of 'LinkedListItem' with no type LinkedList:9: error: expected ';' befo

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

error: ISO C++ forbids declaration of 'LinkedListItem' with no type
LinkedList:9: error: expected ';' before '<' token
<代码>错误:ISO C++禁止声明“没有链接类型” LinkedList:9:错误:应为“;”在“之前,您可能是指标准中的“字符串”而不是“字符串”。在该更改之后,它将编译。请参阅下面的工作代码

#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;
模板
类链接列表项{
公众:
LinkedListItem(T值);
T getValue();
LinkedListItem*getPreviousItem();
void setPrevious(LinkedListItem*previous);
LinkedListItem*getNextItem();
void setNext(LinkedListItem*next);
私人:
LinkedListItem*\u先前;
LinkedListItem*\u下一步;
T_值;
};
模板
LinkedListItem::LinkedListItem(T值){
_价值=价值;
}
模板
T LinkedListItem::getValue(){
返回_值;
}
模板
LinkedListItem*LinkedListItem::getPreviousItem(){
返回上一个;
}
模板
void LinkedListItem::setPrevious(LinkedListItem*previous){
_先前=先前;
}
模板
LinkedListItem*LinkedListItem::getNextItem(){
返回下一步;
}
模板
void LinkedListItem::setNext(LinkedListItem*next){
_下一个=下一个;
}
int main()
{
LinkedListItem*\u列表;
返回0;
}

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

我不确定是什么真正解决了我的问题,但我最终将LinkedList类移动到了Arduino/libraries目录中自己的头文件中。我将类声明和实现拆分为单独的.h和.cpp文件,但这要求我同时包含这两个文件以使代码正常工作。所以,我把它们放回一个.h文件中。我根据QueueList库对类进行建模


对于任何在Arduino上遇到类似问题的人,我建议创建自己的库。有关更多信息,请参阅。如上所述,当我将代码拆分为单独的.h和.cpp文件时,我无法使代码正常工作,除非我同时包含.h和.cpp文件。

您不需要在类内的
LinkedListItem
中提供模板参数。模板参数
std::string
?如果是这样的话,
s
应该是小写。不要打断你的学习,但是std::forward\u列表也存在,如果你只需要一个通用列表,我清理了类定义,删除了模板参数,仍然没有运气。所以用你现在仍然不起作用的内容更新你的帖子。并在代码中指出“第9行”的位置,这会导致编译器错误。我正在开发一个arduino板,它有一组相当精简的库。IDE包含一个名为string的自定义字符串库。据我所知,std::string和std::forward_列表类不可用。如果是的话,我很乐意使用它们。@Jasonf:那么,我的帖子有帮助吗?您是否在文件的开头包含了字符串类?如果它位于命名空间中,您也需要使用它。抱歉,这不起作用。我还尝试了
LinkedListItem测试
给了我同样的错误。@jasonf:您在哪个主机操作系统上使用哪个编译器?如果您在桌面上构建,我的代码对您有效吗?
LinkedListItem<String>* _list;
#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;
}