首先,我对C++/Qt
并不熟悉,所以我尝试了,因为我会在C#
中这样做...我也有一些指针问题..
故事:我使用QSerialPort
在串行232端口上进行读写。当然,应该只有一个实例,否则会出现访问错误。所以我的想法是定义一个静态成员变量来保存对象。
问题:我总是收到错误“未明确引用SerialManager::obj
”
源代码:
serialmanager.h
#include <QSerialPort>
class SerialManager
{
public:
static QSerialPort* getObj();
private:
static QSerialPort* obj;
}
serialmanager.cpp
#include "serialmanager.h"
QSerialPort *obj = new QSerialPort();
QSerialPort* SerialManager::getObj()
{
if(!obj->isOpen())
{
obj->setPortName("/dev/ttyO1"); //error line
obj->setBaudRate(QSerialPort::Baud57600);
//and so on...
}
return obj;
}
答案 0 :(得分:2)
在头文件中,您在头文件中声明SerialManager::obj
。
在您的实施文件中,您要定义obj
,而不是SerialManager::obj
。
修复方法是改变
QSerialPort *obj = new QSerialPort();
到
QSerialPort *SerialManager::obj = new QSerialPort();
您可能会发现要将其初始化为nullptr
,并在需要时按需构建(可能会解决依赖项问题,和/或改善程序启动时间,如果要构建许多静态对象) )。
如果你真的只想构造一个对象,你也可以使指针(但不是指向对象)保持不变:
private:
static QSerialPort *const obj;
这样可以防止意外再次分配(但可能会使其难以替换不同的对象进行单元测试)。
答案 1 :(得分:1)
您缺少班级名称,请通过更改
进行修复startActivity()
到
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
format.setTimeZone(TimeZone.getTimeZone("GMT")); // very important, input Z means UTC+00