如何使用C++头文件中包含的库函数来定义私有变量
How to use included library functions in a C++ header file to define private variables
我是C++的新手,但不是编程专家,最近开始为AVR微控制器编写库。我的库的头文件(Codex.h)如下所示。。
#ifndef Codex_h
#define Codex_h
#include "Arduino.h"
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
class Codex
{
public:
void hostIP(int a ,int b ,int c,int d);
void start(String ID);
void digitalReadOSC();
void analogReadOSC();
void digitalRead();
void analogRead();
void receive();
private:
EthernetUDP _Udp;
int _pin,_a,_b;
int _sensorData[52];
String _nID,_sID,_pID,_snID,_lID,_payloadlen,_payload,_packet;
char _packetBuffer[25];
IPAddress _coreIP(000,000,0,00);
};
#endif
现在我再说一遍,我是C++的新手,所以我认为我犯了一个简单的错误,但我的编译器在IPAddress类型和处理EthernetUDP实例创建时遇到了问题。IPAddress是一个来自Ethernet.h库的函数。以下是当我试图将我的库包含在项目中时,编译器会吐出的内容。
In file included from sketch_aug17b.ino:1:
C:Program Files (x86)ArduinolibrariesCodex/Codex.h:19: error: 'EthernetUDP'
does not name a type
C:Program Files (x86)ArduinolibrariesCodex/Codex.h:24: error: 'IPAddress'
does not name a type
提前感谢您的帮助,即使只是告诉我去读一本C++书:)。
正如@WhozCraig所提到的,类名没有问题,类也不在范围内。因此,我的最佳猜测是,您正试图在方法外部实例化一个成员变量(_coreIP)。您应该首先在类声明中声明成员变量,然后在类的构造函数中实例化它。
所以改变这个。
class Codex
{
...
private:
...
IPAddress _coreIP(000,000,0,00);
};
对于这个
class Codex
{
public:
...
Codex();
private:
...
IPAddress _coreIP;
};
Codex::Codex() :
_coreIP(000,000,0,00)
{
...
}
您可以直接在类的构造函数上实例化成员变量,使用如下所示的:运算符。
顺便说一句,这是我的第一个答案,所以我希望我做得很好:)
问候
我的代码现在正在工作,我不确定这是一个真正的错误还是发生了其他事情,但在使用我的类的工作程序中包含了库中所需的外部头文件后,我不再遇到任何问题,如果有人能向我解释为什么会这样,那就太好了。我的新头代码和程序代码。
//(Codex.h)
#ifndef Codex_h
#define Codex_h
#include "Arduino.h"
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
class Codex
{
public:
void hostIP(int a ,int b ,int c,int d);
void start(String ID);
void digitalReadOSC();
void analogReadOSC();
void digitalRead();
void analogRead();
void receive();
private:
int _pin,_a,_b;
int _sensorData[52];
String _nID,_sID,_ndID,_pID,_snID,_lID,_payloadlen,_payload,_packet;
char _packetBuffer[25];
EthernetUDP _Udp;
IPAddress _coreIP;
};
#endif
这是我的程序,尽管如果我的.h和.cpp文件中已经声明了我需要的库,那么我必须在程序中第二次声明它们,这似乎很不寻常。
#include <Codex.h>
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
Codex codex;
void setup()
{
codex.start("01");
}
void loop()
{
}
相关文章:
- 不同翻译单元中不可重载的非内联函数定义
- Visual Studio中的函数声明和函数定义问题
- Linux c++.在预加载的共享库中定义的基类的崩溃调用函数
- VS2017 #error: : snprintf 的宏定义与标准库函数声明冲突
- CMake 不链接 C 和 C++ 静态库(未定义对函数的引用)
- 单独库中的类成员函数定义和链接依赖项
- 在函数定义中使用特征库时,小数点不会按预期存储
- 我可以获取标准库中定义的函数的地址吗?
- Cmake,Android:调用在预构建库中定义的静态函数
- 将 std 库函数专门用于用户定义类型的shared_ptr是否合法?
- 从标准库重新定义函数是否违反了一个定义规则
- Vim 转到标准库方法/函数定义
- 对自己库函数的未定义引用
- 从库中定义的进程调用静态函数
- 正在使用已在另一个已使用的库中定义了函数名的库
- Friend函数访问静态库中定义的类的私有成员
- 如何使用C++头文件中包含的库函数来定义私有变量
- 已经在ocaml asmrun库中定义了main函数
- c++:不同链接库中定义的相同函数的运行时冲突
- 其中定义了stry和其他C库函数(与声明相反)