我是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是一个来自以太网的函数。h library.Here是我的编译器在我试图将我的库包含在项目中时输出的。
In file included from sketch_aug17b.ino:1:
C:\Program Files (x86)\Arduino\libraries\Codex/Codex.h:19: error: 'EthernetUDP'
does not name a type
C:\Program Files (x86)\Arduino\libraries\Codex/Codex.h:24: error: 'IPAddress'
does not name a type提前感谢您提供的任何帮助,即使只是告诉我去读一本C++书:)。
发布于 2013-08-17 10:30:54
正如@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)
{
...
} 您可以使用:运算符直接在类的构造函数上实例化成员变量,如下所示。
顺便说一下,这是我的第一个答案,所以我希望我做得很好:)
问候
发布于 2013-08-17 22:12:12
我的代码现在可以工作了,我不确定这是真正的错误还是发生了什么,但是在将我的库中需要的外部头文件包含在使用我的类的工作程序中之后,我不再遇到任何问题,如果有人能解释一下为什么会这样,那就太好了。我新的头代码和程序代码。
//(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()
{
}https://stackoverflow.com/questions/18283996
复制相似问题