我正在使用第 3 方库,其中的方法是这样声明的:
void nexLoop(NexTouch *nex_listen_list[]);
在单个 .cpp
文件的情况下,这是有效的:
NexButton b0 = NexButton(0, 1, "b0");
NexTouch *nex_listen_list[] =
{
&b0,
NULL
};
...
nexLoop(nex_listen_list);
完整的示例代码可以在这里看到:https://github.com/itead/ITEADLIB_Arduino_Nextion/blob/master/examples/CompText/CompText.ino
现在我将这个库合并到一个类中,该类具有单独的头文件和 c 文件,以便:
MyNextion.h
#include "Nextion.h"
class MyNextion {
public:
MyNextion();
void loop();
private:
NexButton *b0;
NexTouch *nex_listen_list[];
}
MyNextion.cpp
#include "MyNextion.h"
MyNextion::MyNextion() {
b0 = new NexButton(0, 1, "b0");
nex_listen_list = new ???
}
MyNextion::loop() {
nexLoop(nex_listen_list); // ???
}
我一直在摆弄指针和地址运算符,但找不到成功编译的正确组合。
我的问题是:你会在这里放什么:nex_listen_list = new ???;
此外,我不确定标题是否很好地定义了我的问题。如果您对标题有更好的想法,请指正。
谢谢!
最佳答案
你不应该声明一个没有大小的成员数组。相反,您可以声明一个指向指针的指针:
class MyNextion {
...
private:
NexButton *b0;
NexTouch **nex_listen_list;
};
然后构造就很简单了:
nex_listen_list = new NexTouch*[10];
nex_listen_list[0] = b0;
....
也就是说,nex_listen_list
是指向NexTouch
对象的动态指针数组。完成后不要忘记 delete[]
:
delete[] nex_listen_list;
也就是说,如果数组的大小是常量,那么普通数组就可以了:
NexButton *b0;
NexTouch *nex_listen_list[3];
如果没有,我宁愿使用 std::vector
。像这样的东西:
class MyNextion {
...
private:
NexButton *b0;
std::vector<NexTouch*> nex_listen_list;
};
然后不需要 new
或 delete
:
nex_listen_list.push_back(b0);
nexLoop(nex_listen_list.data());
继续,您可以将 b0
声明为完整对象,而不是指针:
class MyNextion {
...
private:
NexButton b0;
std::vector<NexTouch*> nex_listen_list;
};
...
nex_listen_list.push_back(&b0); //use the pointer!
没有 new
所以没有 delete
也没有泄漏。
关于c++ - 在C++语言中,如何创建一个指向数组的指针的新对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40875274/