C++ 定义struct并用作参数
我正在做我的Arduino项目,这是我唯一使用的C/C++编译器。 我不明白为什么不能将struct用作函数参数的类型 不确定这是特定于Arduino编译器设计还是通用C/C++编程C++ 定义struct并用作参数,c++,c,struct,arduino,C++,C,Struct,Arduino,我正在做我的Arduino项目,这是我唯一使用的C/C++编译器。 我不明白为什么不能将struct用作函数参数的类型 不确定这是特定于Arduino编译器设计还是通用C/C++编程 struct myStruct_t { byte var1; byte var2; }; myStruct_t myStruct; void setup() { } void loop() { } void myFunc(myStruct_t *myVar) { int
struct myStruct_t {
byte var1;
byte var2;
};
myStruct_t myStruct;
void setup() {
}
void loop() {
}
void myFunc(myStruct_t *myVar) {
int i = 0;
}
这将导致编译器错误:
错误:变量或字段“myFunc”声明为无效
错误:“myStruct\u t”未在此作用域中声明
错误:“myVar”未在此作用域中声明
如果我注释掉“myFunc”的声明,那么它将按原样编译。
我不清楚为什么我可以声明和使用该结构的变量,但是我可以使用该结构作为参数类型。“struct”类型是否不作为参数使用的类型
谢谢。因为在c中需要
typedef
来实现这一点,否则需要使用struct
来引用结构
我建议不要使用typedef
ing,也不要使用结构名称中的\u t
,但如果您希望这样做,请这样做
typedef struct myStruct_t {
byte var1;
byte var2;
} myStruct_t;
不使用全局变量,将变量作为参数。< /p>或者选择一个,因为它们对这个代码的处理方式明显不同,足以引起您所看到的确切问题。我建议至少阅读这些问题的第一个答案:代码是有效的C++,问题是ARDUNO IDE是迟钝的,并导致类似这样的错误,试图隐藏一些C++的复杂性(有关详细信息,请参阅链接答案)。就C++而言C++ C++语言的代码,我个人的,我尽快离开它,选择构建系统,让我写实际的C++。没有C/C++是C或C++。@ Mattooiali:我们不要使用这些可鄙的词。C兼容性不是问题,默认的代码是C++(C++ 11,IrrC)。“MaTooTiali我不知道,这根本没有任何意义,这可能是一个在ARDUNO中使用的编译器,你不认为有一个C编译器是合乎逻辑的,并且没有C兼容性的东西,它是C还是C++,不管你喜欢不喜欢。我将重新措辞:OP使用的是AdUINO ID/库,就像他发布的代码一样。(ARDUNO NETAG,没有包含,Stuts/Loop=这是一个ARDION-PDE的草图),ARDIIO草图是C++,句号(ARDUINO库是用C++编写的,ARDUNO IDE使用的是AVR GCC的G++)。问题不是“你必须用C编译器写C”,因为他使用C++编译器。实际问题是“Arduino IDE延迟”,请参阅链接的答案。