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:错误:预期';''<''令牌
查看其他问题,在这里或这里人们忘记了包括或使用性标准,但我已经做到了。
/*
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中包含的文件中:
node.h:13:错误:ISO C 禁止" vector"声明,没有类型
node.h:13:错误:无效使用'::'
node.h:13:错误:预期';'在'&lt;'之前令牌
我只是遇到了同一问题,并且能够通过在我的主要草图.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 编译器。另外,C 编译器可以通过名称AVR-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
用作包括Guard,不太可能定义,但我不知道您的标题在做什么。
- 用C++中的CPerson(类)类型的对象初始化STL矢量
- 如何在<double>矢量中创建复杂类型的模板<T>?
- 矢量类型规范中的星号用于什么?
- 阅读从 istream 到矢量的不同类型列表
- 在硬件SIMD矢量指针和相应类型之间进行"interpret_cast"是一种未定义的行为吗
- 您可以将binary_search应用于具有自定义类型的矢量吗?
- 类型映射资源并将列表转换为矢量(并返回)
- 如何在OpenCV中存储部分轮廓点喜欢新矢量中的左侧,该类型为<vector<vector<Point>>
- 矢量擦除错误,无法删除不完整的类型
- OpenCL 矢量类型:在启用 C++11 的情况下无法访问联合组件 x,y,z
- 矢量迭代器类型未知
- 为矢量对象请求转换为非标量类型
- 将 2D 矢量转换为 C 类型的最佳方法(适用于 SGX 飞地)
- 您的类型在C++中的矢量
- std::矢量插入,不知道元素的类型
- 是否可以使用模板非类型参数使用#if指令?(矢量多合一类)
- 声明矢量和指针而无需创建任何类型的对象
- CPP 中结构类型的指针的矢量数组
- 矢量类型 字符串,但当用整数初始化时
- 如何在C++中删除矢量类型的重复项<string>?