首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >构造函数和对象声明的特定事项

构造函数和对象声明的特定事项
EN

Stack Overflow用户
提问于 2013-02-20 21:39:06
回答 1查看 121关注 0票数 0

在我的main.cpp文件中,我调用了类的构造函数。在构造函数中,我从一些静态函数中设置了这个类的变量。所有问题都与从NTP服务器设置时间有关。

作为getter的静态函数使用while循环来检查标志。如果未设置时间,则标记为false;如果NTP服务器至少响应了一次,则标记为true。如果标志为假,则while循环必须尝试永远获取时间(因为没有时间就没有理由继续),如果为真,则返回时间。

构造函数通过调用getter来设置我所说的变量。

当我在main中声明该类的对象时,程序不会运行,因为我在串行打印时什么也得不到。如果我注释掉声明,它就会起作用。此外,它也不像是在while里面,因为我在里面放了一个序列打印,它也没有出现。我给出的代码如下:

构造函数:

代码语言:javascript
复制
#import "DayTime.h"
#include "NTP.h"

DayTime::DayTime(){
    hour = NTP::getLCThour();
    minutes = NTP::getMin();
    seconds = NTP::getSec();
}

main.cpp文件:

代码语言:javascript
复制
#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)第一个getter:

代码语言:javascript
复制
int NTP::getLCThour(){
    while(timeNTPSet==false){
        Serial.print("kolaw");
        getTime();
    }
    return lcthour;
}

2) header上标志的声明:

代码语言:javascript
复制
static bool timeNTPSet;

这是一个公共变量。

3) .cpp文件开头的定义:

代码语言:javascript
复制
bool NTP::timeNTPSet= false;

这是在包含之后的.cpp文件中设置的。

最后是将标志设置为true的函数的一部分:

代码语言:javascript
复制
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对象的声明,它也能正常工作。

我该怎么做呢?

EN

回答 1

Stack Overflow用户

发布于 2013-02-20 21:43:24

DayTime变量声明为全局变量。这意味着它的构造函数是在调用main函数之前调用的。而且由于串口,以及网络,我猜,没有设置,那么它将不会工作。

您可以在DayTime类中创建一个初始化,它完成构造函数所做的工作,并在设置串行端口和网络之后调用它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14981252

复制
相关文章

相似问题

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