构造函数和对象声明的特定事项
Constructor and object declaration specific matter
在main.cpp
文件中,我调用类的构造函数。在构造函数中,我从一些静态函数中设置了这个类的变量。所有的问题都是关于从NTP服务器设置时间。
作为getter的静态函数使用while
循环来检查标志。如果未设置时间,则该标志为false;如果NTP服务器至少有一次响应,则该标记为true。如果标志为false,则while
循环必须尝试永远获取时间(因为没有理由在没有时间的情况下继续),如果为true,则返回时间。
构造函数通过调用getter来设置变量,正如我所说的那样。
当我在main中声明该类的对象时,程序不会运行,因为我在串行打印中一无所获。如果我反对这个声明,它就行了。此外,它并不像是卡在while
里面,因为我在里面放了一个串行打印,它也没有出现。我给出以下代码:
构造函数:
#import "DayTime.h"
#include "NTP.h"
DayTime::DayTime(){
hour = NTP::getLCThour();
minutes = NTP::getMin();
seconds = NTP::getSec();
}
main.cpp
文件:
#include <Arduino.h>
#include <SPI.h>
#include "NTP.h"
#include "DayTime.h"
#include "DayNumber.h"
DayTime DT;
DayNumber DN;
int main(void)
{
init();
setup();
for (;;)
loop();
return 0;
}
void setup() {
Serial.begin(9600);
NTP::startEthernetAndUdp();
}
void loop() {
NTP::getTime();
// Serial.println(DT.hour);
// Serial.println(DT.getTimeToDec());
delay(3000);
在这里,如果我对名为DT的DayTime对象的声明进行注释,那么getTime函数就会起作用。
NTP.cpp部分:
1) 第一个吸气剂:
int NTP::getLCThour(){
while(timeNTPSet==false){
Serial.print("kolaw");
getTime();
}
return lcthour;
}
2) 标头上的标志声明:
static bool timeNTPSet;
这是一个公共变量。
3) 它在.cpp文件开头的定义:
bool NTP::timeNTPSet= false;
这是在include之后的.cpp文件中设置的。
将标志设置为true的函数的最后一部分:
NTP NTP::getTime(){
if (testNtpServer()){
timeNTPSet = true;
// We've received a packet, read the data from it
Udp.read((unsigned char*)packetBuffer, NTP_PACKET_SIZE);
testNTPServer函数只测试3-4个不同的NTP服务器,以便至少从其中一个服务器获得时间。此外,如果我像前面所说的那样评论DayTime对象的声明,它也可以正常工作。
我该怎么做?
您将DayTime
变量声明为全局变量。这意味着它的构造函数在调用main
函数之前被调用。由于串行端口和网络没有设置,我猜它将无法工作。
您可以在DayTime
类中创建一个初始化,执行构造函数的操作,并在设置串行端口和网络后调用它。
- std::unordered_map 类型对象声明期间出现"field has incomplete type"错误
- 对象声明中的模板"error: expected expression"
- 为什么我的对象声明不调用默认构造函数?
- C++文件中.cpp静态对象声明
- 使用自定义对象声明shared_ptr数组时出现错误 C2664
- 具有多态性的对象声明中的逗号
- 如果我的班级是字面的班级,那么将我的类的对象声明为constexpr是多余的
- 何时应在Qt中将子对象声明为其父类的成员变量
- 在将对象声明为挥发性时,如何在C 中超载运算符
- 将一个类的对象声明为另一个类(C++)的成员
- 将对象声明为其自身的成员变量
- C 全局对象声明
- 尝试和捕获中的对象声明未在范围内定义
- 向量对象声明后的括号是什么意思
- C++对象声明被称为抽象
- 将派生对象声明为类中的私有成员时发生编译错误
- C++中的优化(对象声明)
- C++ 中类之间的对象声明
- 成员对象声明的差异
- 如果将类的对象声明为另一个类的实例变量,则调用该类的构造函数