-1

我有一个像 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

4

1 回答 1

0

您必须将乘法函数定义为 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 访问函数是一种更简洁的解决方案。

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

于 2012-05-23T14:36:04.433 回答