-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 に変更し、それらをヘッダー ファイルの関数リストに追加すると、悪い結果が得られました。おそらく static void &static inline void と関係があります... Ty

4

1 に答える 1

0

次のように、TableViewクラスの一部としてmultiply関数を定義する必要があります。

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

于 2012-05-23T14:36:04.433 に答える