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

时间:2012-05-23 14:30:43

标签: c++ header-files

我有一个像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并将它们添加到头文件中的函数列表,我得到了一些不好的结果。可能与静态空隙和静态内联空隙有关... Ty

1 个答案:

答案 0 :(得分:0)

您必须将multiply函数定义为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的实例传递给multiply()。如果您决定将TableView实例传递给函数,那么您必须考虑如何通过创建getter函数或将其公开来访问类成员。 getter acccessor功能是一个更清洁的解决方案。

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