首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C++头文件中使用包含的库函数来定义私有变量

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

Stack Overflow用户
提问于 2013-08-17 08:43:05
回答 2查看 1.7K关注 0票数 0

我是C++新手,但不是编程人员,最近开始为AVR微控制器编写一个库。我的库的头文件(Codex.h)如下所示。

代码语言:javascript
复制
#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是我的编译器在我试图将我的库包含在项目中时输出的。

代码语言:javascript
复制
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++书:)。

EN

回答 2

Stack Overflow用户

发布于 2013-08-17 10:30:54

正如@WhozCraig所提到的,类名没有问题,类也不在作用域内。因此,我最好的猜测是,您正在尝试实例化一个方法外部的成员变量(、_coreIP、)。首先应该在类声明上声明成员变量,然后在类的构造函数上实例化它。

所以要改变这一点。

代码语言:javascript
复制
class Codex
{
...
private:
    ...
    IPAddress _coreIP(000,000,0,00);
};

为此

代码语言:javascript
复制
class Codex
{
public:
    ...
    Codex();
private:
    ...
    IPAddress _coreIP;
};

Codex::Codex() :
  _coreIP(000,000,0,00)
{
    ...
}   

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

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

问候

票数 0
EN

Stack Overflow用户

发布于 2013-08-17 22:12:12

我的代码现在可以工作了,我不确定这是真正的错误还是发生了什么,但是在将我的库中需要的外部头文件包含在使用我的类的工作程序中之后,我不再遇到任何问题,如果有人能解释一下为什么会这样,那就太好了。我新的头代码和程序代码。

代码语言:javascript
复制
//(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文件中已经声明了所需的库,那么我必须在程序中第二次声明这些库,这似乎很不寻常。

代码语言:javascript
复制
#include <Codex.h>
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>

Codex codex;
void setup()
{
codex.start("01");  
}
void loop()
{ 
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18283996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档