如何在C ++头文件中使用包含的库函数来定义私有变量

时间:2013-08-17 00:43:05

标签: c++ function header include

我是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)\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 ++书籍:)。

2 个答案:

答案 0 :(得分:0)

正如@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)
{
    ...
}   

您可以使用:运算符直接在类的构造函数上实例化成员变量,如此处所示。

顺便说一句,这是我的第一个答案,所以我希望我做得很好:)。

问候

答案 1 :(得分:0)

我的代码现在正在运行,我不确定这是一个真正的错误还是正在发生的其他事情,但是在我的工作程序中包含我的库中所需的外部头文件之后我使用了我的类我不再任何问题,如果有人可以向我解释为什么这样会很好。我的新标题代码和程序代码。

//(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()
{ 
}