静态对象及其创建方法 我的程序有问题,我用NavaCabo XE8C++ +Builder进行32位的工作。

静态对象及其创建方法 我的程序有问题,我用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;

当我想用一种方法读/写东西到PLC(可编程逻辑控制器,主要用于与机器通信)时,我得到一个对象,它是
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);