静态对象以及如何创建它

时间:2015-09-21 08:36:48

标签: c++ object

我的程序存在问题,我正在使用Embarcadero XE8 C ++构建器32位。

当我想使用一种方法来读取/写入PLC的东西(可编程逻辑控制器,主要用于与机器通信)时,我得到一个it++的对象。

我只需要一个Main表单,我想创建与PLC的连接。

在我的主要内容中我有这个:

for (ID3v2::FrameList::ConstIterator it = t->frameList().begin(); it != t->frameList().end(); /* nothing here */) {
    if ((*it)->frameID() != handle) {
        t->removeFrames((*it)->frameID());
        it = t->frameList().begin();
    } else {
        ++it;
    }
}

在我所拥有的同一页面上的方法中:

NULL

当我调试时,它显示pPLCHandler = static CEasyPLCHandler *pPLCHandler;

当我查看long ReadWriteTest(void) { unsigned long ulStart; PlcSymbolDesc *pSymbols; unsigned long ulNumOfSymbols = 0; int iNumOfVars = 2; int i; char **ppszVars = new char*[iNumOfVars]; for (i=0; i< iNumOfVars; i++) ppszVars[i] = new char[255]; long lResult = RESULT_FAILED; lResult = pPLCHandler->GetAllItems(&pSymbols, &ulNumOfSymbols); if (lResult == RESULT_OK) 来自哪里时,我来到一个页面(我从库中包含)并看到这些行:

NULL

那么如何创建这个对象呢?

我添加了一行:

CEasyPLCHandle

并获得一些未解决的外部错误:

[ilink32错误]错误:未解析的外部'CEasyPLCHandler ::〜CEasyPLCHandler()'引自C:\ USERS \ BART \ DOCUMENTS \ EMBARCADERO \ STUDIO \ PROJECTS \ REALTEST \ WIN32 \ DEBUG \ UNIT1.OBJ

但是这些已经在另一个文件中?为什么他不能使用这些?

1 个答案:

答案 0 :(得分:3)

作为...我无法拼写的希腊人,已经正确地说过,你没有初始化指针。一个静态或全局的简单变量(int,double,char及其指针)将始终初始化为0,这就是NULL来自的地方。

为了正确初始化静态对象,您需要使用指针new或使用static CEasyPLCHandler PLCHandler(RTS_INVALID_HANDLE);之类的东西,它将构造对象并保存新的以及随后的delete(避免内存泄漏)

然而,从它的外观来看,你错过了包含CEasyPLCHandler object代码的实际共享库(至少这是链接器错误告诉我的内容)。

请记住,如果您决定使用自动静态对象,则需要使用.代替->来访问它。