C++ 将对成员对象的引用添加到指针数组
我有一个类,它包含一些包含对象的私有成员和一个动态指针数组,我想用指向其中一些成员对象的指针填充这些指针C++ 将对成员对象的引用添加到指针数组,c++,C++,我有一个类,它包含一些包含对象的私有成员和一个动态指针数组,我想用指向其中一些成员对象的指针填充这些指针 class NextionTest : public NextionDisplay { private: NexText lblText = NexText(0, 1, "t0"); NexButton btnPage1 = NexButton( 0, 2, "b0"); NexButton btnPage0 =
class NextionTest : public NextionDisplay {
private:
NexText lblText = NexText(0, 1, "t0");
NexButton btnPage1 = NexButton( 0, 2, "b0");
NexButton btnPage0 = NexButton( 1, 1, "b0");
NexTouch *nex_listen_list = [
&lblText,
&btnPage0,
&btnPage1,
NULL
];
/* rest of class not shown */
};
上述代码导致此错误:
捕获非变量“NextionTest::lblText”
&lblText
我试图将nex_listen_列表的初始化移到init方法,但结果相同。
我不知道什么是俘虏。。但我似乎做错了什么。
如何解决这个问题?我建议使用
std::vector
,它是动态的,并且知道它的大小
class NextionTest : public NextionDisplay {
private:
NexText lblText = NexText(0, 1, "t0");
NexButton btnPage1 = NexButton( 0, 2, "b0");
NexButton btnPage0 = NexButton( 1, 1, "b0");
std::vector<NexTouch*> nex_listen_list = {
&lblText,
&btnPage0,
&btnPage1};
/* rest of class not shown */
};
n2.nex\u listen\u list
将有指向n1
的数据成员的指针,因此您应该删除复制和移动操作
class NextionTest : public NextionDisplay {
NextionTest(const NextionTest&) = delete;
NextionTest& operator=(const NextionTest&) = delete
//...
};
您可以通过以下方式初始化阵列:
NexTouch* nex_listen_list[4] = {
&lblText,
&btnPage0,
&btnPage1,
nullptr
};
但是,这定义了一个固定大小的数组,从“空终止”来看,您的目的似乎是拥有一个动态数组,该数组会增长/收缩,并且总是以nullptr
终止,类似于字符串。在这种情况下,最好使用std::vector
:
std::vector<NexTouch*> nex_listen_list = {
&lblText,
&btnPage0,
&btnPage1,
nullptr
};
std::vector nex\u listen\u list={
&lblText,
&btnPage0,
&btnPage1,
nullptr
};
通常不需要nullptr终止,但这取决于您希望对阵列执行的操作。如果您将它发送给某个采用旧式数组的API,您可以使用
nex\u listen\u list.data()
检索嵌入的C样式数组。我天真的猜测(对C++11及更高版本不太熟悉)是[]
看起来您想要声明一个lambda。e、 g.[x]
作为lambda的一部分意味着:通过值捕获x。改为尝试{}
,或{{}
或任何正确的方法;)我真的不是初始化列表方面的专家,你的编译器在声明lambda函数。NexTouch的定义是什么?如果是,比如一个数组的指针,玩具应该使用聚合初始化:与其猜测语法,我建议选择一个。@captain非常感谢你的建设性评论nex\u listen\u list
不是一个动态数组,你可能需要一个std::vector
。但是,按照这种设置方式,如果移动或复制对象,将留下一堆引用,这些引用要么悬空,要么进入另一个对象。
std::vector<NexTouch*> nex_listen_list = {
&lblText,
&btnPage0,
&btnPage1,
nullptr
};