Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将对成员对象的引用添加到指针数组_C++ - Fatal编程技术网

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
};