正如WhozCraig所提到的,类名称没有问题,也没有类在范围内。因此,我的最佳猜测是,您试图在方法之外实例化一个成员变量(\u coreIP)。您应该首先在类声明中声明成员变量,然后在类的构造函数中实例化它,c++,function,header,include,C++,Function,Header,Include" /> 正如WhozCraig所提到的,类名称没有问题,也没有类在范围内。因此,我的最佳猜测是,您试图在方法之外实例化一个成员变量(\u coreIP)。您应该首先在类声明中声明成员变量,然后在类的构造函数中实例化它,c++,function,header,include,C++,Function,Header,Include" />

如何在C++;定义私有变量的头文件 我是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++书:) < P>正如WhozCraig所提到的,类名称没有问题,也没有类在范围内。因此,我的最佳猜测是,您试图在方法之外实例化一个成员变量(\u coreIP)。您应该首先在类声明中声明成员变量,然后在类的构造函数中实例化它

如何在C++;定义私有变量的头文件 我是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++书:) < P>正如WhozCraig所提到的,类名称没有问题,也没有类在范围内。因此,我的最佳猜测是,您试图在方法之外实例化一个成员变量(\u coreIP)。您应该首先在类声明中声明成员变量,然后在类的构造函数中实例化它,c++,function,header,include,C++,Function,Header,Include,所以改变这个 class Codex { ... private: ... IPAddress _coreIP(000,000,0,00); }; 为此 class Codex { public: ... Codex(); private: ... IPAddress _coreIP; }; Codex::Codex() : _coreIP(000,000,0,00) { ... } 您可以直接在类的构造函数上实例化成员变量

所以改变这个

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
//(Codex.h)
#ifndef法典
#定义法典
#包括“Arduino.h”
#包括
#包括
#包括
分类法典
{
公众:
无效主机IP(内部a、内部b、内部c、内部d);
无效开始(字符串ID);
void digitalReadOSC();
void-readosc();
void digitalRead();
void-read();
无效接收();
私人:
内部引脚,内部引脚a,内部引脚b;
int_传感器数据[52];
字符串nID、sID、ndID、pID、snID、lID、payloadlen、payloadlen、packet;
字符包缓冲区[25];
EthernetUDP Udp;
IPAddress\u coreIP;
};
#恩迪夫
这是我的程序,尽管我不得不在程序中第二次声明我所需的库(如果它们已经在我的.h和.cpp文件中声明的话),这似乎是不寻常的

#include <Codex.h>
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>

Codex codex;
void setup()
{
codex.start("01");  
}
void loop()
{ 
}
#包括
#包括
#包括
#包括
法典;
无效设置()
{
法典委员会启动(“01”);
}
void循环()
{ 
}

您检查拼写了吗
EthernetUdp
也许,基于文件名?也许IpAddress有预感…你检查过它们是否在名称空间内吗?@Reuben你为什么要将头文件保存在标准目录中?在程序文件路径中保留用户头文件有点不寻常。它混淆了错误是来自标准头文件还是您自己的头文件。错误显然来自我的头文件,我不认为我的头文件在(/Program Files)中会增加错误来源的模糊性。包含的头文件是arduino IDE的标准。@JonathanLeffler很擅长,但看起来确实如此。(顺便说一句,这也是我的第一个猜测)。嗯,没错,但是EthernetUDP不工作的方式很奇怪。谢谢你的回答,我解决了这个问题,但是仍然有点困惑(对C++来说是新的)。我确实也遇到了(_coreIP)变量的问题,因为我试图在头文件中初始化它,再次感谢你花时间发布答案。
#include <Codex.h>
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>

Codex codex;
void setup()
{
codex.start("01");  
}
void loop()
{ 
}