静态对象及其创建方法 我的程序有问题,我用NavaCabo XE8C++ +Builder进行32位的工作。
当我想用一种方法读/写东西到PLC(可编程逻辑控制器,主要用于与机器通信)时,我得到一个对象,它是静态对象及其创建方法 我的程序有问题,我用NavaCabo XE8C++ +Builder进行32位的工作。,c++,object,C++,Object,当我想用一种方法读/写东西到PLC(可编程逻辑控制器,主要用于与机器通信)时,我得到一个对象,它是NULL 我只是有一个主窗体,我想在其中创建与PLC的连接 我的主要观点是: static CEasyPLCHandler *pPLCHandler; 在同一页面上的方法中,我有: long ReadWriteTest(void) { unsigned long ulStart; PlcSymbolDesc *pSymbols; unsigned long ulNumOfSymbols = 0;
NULL
我只是有一个主窗体,我想在其中创建与PLC的连接
我的主要观点是:
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)
那么如何创建这个对象呢
我加了一句话:
pPLCHandler = new CEasyPLCHandler(RTS_INVALID_HANDLE);
并获取一些未解决的外部错误:
[ilink32错误]错误:从C:\USERS\BART\DOCUMENTS\EMBARCADERO\STUDIO\PROJECTS\REALTEST\WIN32\DEBUG\UNIT1.OBJ引用的未解析的外部'CeasyplHandler::~CeasyplHandler()
但是这些已经在另一个文件中了?为什么他不能用这些呢?就像……一个我不会拼写名字的希腊人,已经正确地说了,你没有初始化指针。静态或全局简单变量(int、double、char及其指针)将始终初始化为0,因此
NULL
来自于此
为了正确初始化静态对象,您需要使用指针和new
,或者使用类似static CEasyPLCHandler PLCHandler(RTS\u无效\u句柄)的东西代码>,它将构造对象并为您保存新的以及后续的删除
(使您免于内存泄漏)
但是,从外观上看,您缺少实际的共享库,该库包含CEasyPLCHandler对象
(至少链接器错误告诉我这一点)
请记住,如果您决定使用自动静态对象,则需要使用
而不是->
来访问它,因为…我无法拼写其姓名的希腊人已经正确地说,您没有初始化指针。静态或全局简单变量(int、double、char及其指针)将始终初始化为0,因此NULL
来自于此
为了正确初始化静态对象,您需要使用指针和new
,或者使用类似static CEasyPLCHandler PLCHandler(RTS\u无效\u句柄)的东西代码>,它将构造对象并为您保存新的以及后续的删除
(使您免于内存泄漏)
但是,从外观上看,您缺少实际的共享库,该库包含CEasyPLCHandler对象
(至少链接器错误告诉我这一点)
请记住,如果您决定使用自动静态对象,则需要使用
而不是->
来访问它,因为…我无法拼写其姓名的希腊人已经正确地说,您没有初始化指针。静态或全局简单变量(int、double、char及其指针)将始终初始化为0,因此NULL
来自于此
为了正确初始化静态对象,您需要使用指针和new
,或者使用类似static CEasyPLCHandler PLCHandler(RTS\u无效\u句柄)的东西代码>,它将构造对象并为您保存新的以及后续的删除
(使您免于内存泄漏)
但是,从外观上看,您缺少实际的共享库,该库包含CEasyPLCHandler对象
(至少链接器错误告诉我这一点)
请记住,如果您决定使用自动静态对象,则需要使用
而不是->
来访问它,因为…我无法拼写其姓名的希腊人已经正确地说,您没有初始化指针。静态或全局简单变量(int、double、char及其指针)将始终初始化为0,因此NULL
来自于此
为了正确初始化静态对象,您需要使用指针和new
,或者使用类似static CEasyPLCHandler PLCHandler(RTS\u无效\u句柄)的东西代码>,它将构造对象并为您保存新的以及后续的删除
(使您免于内存泄漏)
但是,从外观上看,您缺少实际的共享库,该库包含CEasyPLCHandler对象
(至少链接器错误告诉我这一点)
请记住,如果您决定使用自动静态对象,那么您需要使用
而不是->
来访问它。为什么要声明指针?只需编写静态CEasyPLCHandler pPLCHandler代码>。否则调用pPLCHandler=new-CEasyPLCHandler(/*您的args*/)
在main()
的开头,我需要指针部分,否则他会抱怨其他项目。我刚刚注意到我必须添加一行额外的代码:pPLCHandler=new-CEasyPLCHandler(RTS\u无效\u句柄)代码>。不幸的是,我现在遇到了一些新的错误,没有解决外部问题。为什么要声明一个指针?只需编写静态CEasyPLCHandler pPLCHandler代码>。否则调用pPLCHandler=new-CEasyPLCHandler(/*您的args*/)
在main()
的开头,我需要指针部分,否则他会抱怨其他项目。我刚刚注意到我必须添加一行额外的代码:pPLCHandler=new-CEasyPLCHandler(RTS\u无效\u句柄)代码>。不幸的是,我现在遇到了一些新的错误,没有解决外部问题。为什么要声明一个指针?只需编写静态CEasyPLCHandler pPLCHandler代码>。否则调用pPLCHandler=new-CEasyPLCHandler(/*您的args*/)
在main()
的开头,我需要指针部分,否则他会抱怨其他项目。我刚刚注意到我必须添加一行额外的代码:pPLCHandler=new-CEasyPLCHandler(RTS\u无效\u句柄)代码>。不幸的是,我得到了一些新的
pPLCHandler = new CEasyPLCHandler(RTS_INVALID_HANDLE);