将数据从头文件获取到源文件中的非成员函数中

Get data from header file into non-member function in source file

本文关键字:成员 函数 源文件 数据 文件 获取      更新时间:2023-10-16

我有一个像BigArr,arr,...在标头中声明:

class TableView:public QWidget 
{
  Q_OBJECT
  public:TableView (QWidget * parent = 0);
  std::vector < TXdata >  BigArr;
  std::vector < float >  arr;
  std::vector < float >  arr2;
  std::vector < int >  arrlocKtab;
  std::vector < int >  arrlocKrow;

在源文件中,我有一些从其他地方复制/粘贴的功能,例如:

static void
 multiply (float q[4], float value)
{
  q[0] *= value;
  q[1] *= value;
  q[2] *= value;
  q[3] *= value;
}

以及我制作的其他一些功能,例如:

 void
 TableView::ShowContextMenu (const QPoint & pos)    // this is a slot
 {

如何从头文件中获取声明以在复制/粘贴函数中工作。喜欢:

  static void
     multiply (float q[4], float value)
    {
  arr[0]= something...

通过将 c/p 函数重命名为 void TableView::function 并将它们添加到头文件中的函数列表中,我得到了一些不好的结果。可能与静态空洞和静态内联空隙有关......泰

您必须将乘法函数定义为 TableView 类的一部分,如下所示:

class TableView:public QWidget 
{
    ...
    void multiply(float q[4], float value);
    ...
};

然后在源文件中定义它,如下所示:

void TableView::multiply(float q[4], float value)
{
    ...
    arr[0] = something;
    ...
}

或者,如果您不能/不想使 TableView 成为 TableView 的成员,请将 TableView 的实例传递到 multiply(( 中。如果您决定将 TableView 的实例传递给函数,则必须考虑如何通过创建 getter 函数或将它们公开来访问类成员。吸气器接收器功能是一个更清洁的解决方案。

无论哪种方式都有效,但是如果您决定使所有成员函数都有效,请考虑设计并确保类不会变得臃肿,称为低内聚:en.wikipedia.org/wiki/Single_responsibility_principle