簡體   English   中英

ISO C ++禁止聲明無類型的“向量”

[英]ISO C++ forbids declaration of 'vector' with no type

我在使用arduino c和StandardCplusplus軟件包時遇到問題。 我正在嘗試聲明一個向量,但出現以下錯誤:

Node.h:26:錯誤:ISO C ++禁止聲明無類型的“向量”

Node.h:26:錯誤:無效使用'::'

Node.h:26:錯誤:預期';'在'<'標記之前

在其他問題上,人們在這里這里忘記了include或use std,但是我都做到了。

/*
 Node.h
*/
#ifndef Node_h
#define Node_h
#include "Arduino.h"
#include <StandardCplusplus.h>
#include <vector>
#include <string>
#include <iterator>
class Node
{
  public:
    Node(int size);
    ~Node();
    float bias();
    void set_bias(float);
    void print();
    void fprint(FILE *);
    float compute(std::vector<float> inputs);
    void setWeights(std::vector<float> inws);
    void set_weight(int,float);
    float dutyCycle();

  protected:
    std::vector<float> _weights;               //input weights:30
    float level;
    void init(int size);
    std::vector<int> firelog;

};

#endif

謝謝

編輯:我正在使用arduino 1.5.5 ide編譯器。

edit2:我刪除了除矢量以外的所有內容,按注釋產生:

/*
 Node.h
*/
#ifndef Node_h
#define Node_h

#include <vector>
class Node
{
  public:
      Node();
      ~Node();
      std::vector<int> test;
};

#endif

仍然輸出錯誤:

在Node.cpp包含的文件中:1:

Node.h:13:錯誤:ISO C ++禁止聲明無類型的“向量”

Node.h:13:錯誤:無效使用'::'

Node.h:13:錯誤:預期為';' 在“ <”令牌之前

我遇到了同樣的問題,並且能夠通過在我的主要草圖.ino文件中包含StandardCplusplus.h來解決此問題,而不是在要使用該向量的C ++類頭文件中包含它。因此,它看起來大致像這樣:

/*
 Main.ino (or whatever your main sketch file is called)
*/

#include <StandardCplusplus.h>
#include "Node.h"

// ...

void setup()
{
}

void loop()
{
}

然后在Node.h中:

/*
 Node.h
*/
#ifndef Node_h
#define Node_h

#include <vector>
class Node
{
  public:
      Node();
      ~Node();
      std::vector<int> test;
};

#endif

您閱讀過文檔嗎? http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_cplusplus

我可以在AVR上使用C ++嗎?

基本上可以,C ++受支持(當然,假設您的編譯器已配置並編譯為支持它)。 以.cc,.cpp或.C結尾的源文件將自動導致編譯器前端調用C ++編譯器。 或者,可以使用名稱avr-c ++顯式調用C ++編譯器。

但是,目前不支持libstdc ++,這是完整C ++實現所需的標准支持庫。 這對可以編譯的C ++程序施加了許多限制。

使用編譯器的-E選項預處理文件,並刪除編譯器會抱怨的東西-c-o 由於您沒有顯示如何嘗試編譯代碼,因此無法建議調用的外觀。 注意,輸出必然很大,即,您應該將其重定向到文件或通過管道傳遞給less

處理完文件后,檢查Node類中的聲明是否仍讀取原始內容(確切的結果取決於編譯器)。 特別要確認std沒有神奇消失(

如果該行看起來不錯,請檢查是否正確包含了<vector>標頭。 您應該能夠對行匹配#.*vector進行細化,例如,在我的機器的預處理輸出中看起來像這樣:

# 1 "/opt/gcc-current/include/c++/4.9.0/vector" 1 3

在那行之后,您應該期望std::vector模板的實際聲明(嗯,在某些時候;它可能首先包含其他標頭)。 如果編譯器找到另一個文件,該文件恰好被稱為vector ,則std::vector的聲明可能會丟失。

另一個候選者可能是為<vector>標頭定義包含保護的對象。 那將在上面找到其位置的vector文件的代碼之前。 例如,文件/opt/gcc-current/include/c++/4.9.0/vector使用_GLIBCXX_VECTOR作為包含保護,不太可能定義,但我不知道您的標頭在做什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM