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

C++ 将数据从头文件获取到源文件中的非成员函数中,c++,header-files,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 < i

我有一个像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;
还有一些我做的其他功能,比如:

 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并将其添加到头文件中的函数列表中,我得到了一些糟糕的结果。可能与静态void和静态内联void有关。。。Ty

必须将乘法函数定义为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()中。如果您决定将TabLVIEW的实例传递给函数,那么您就必须考虑如何通过生成一个吸收器函数或使其公开来访问类成员。getter accessor函数是一个更干净的解决方案


任何一种方法都是可行的,但是如果你决定让所有成员都发挥作用,那么就考虑一下设计,确保这个类不会臃肿,称为低内聚:EN。维基百科。org/wiki /单负责任原则/P>你得到了什么坏结果?看到它们会很有帮助,因为我记得它是关于调用c/p函数中的非静态函数的。我必须将每个函数调用都更改为TableView::function还是?好的,下面两个答案都可以解决问题。我想@Als和我差不多同时回答/编辑:)好的,我会把所有内容都改成成员函数。所以我必须只在头文件中放置静态void/静态内联void,在源文件中仅放置void,还是只在每个与void相关的函数上使用void?两个都是!无论哪种方法都有效,但是如果你决定让所有成员都能发挥作用,请考虑设计,确保类不会臃肿,称为低内聚:好的,我改变了代码,就像我说的一样。现在我得到这个链接错误:错误102错误LNK2019:未解析的外部符号“void\uu cdecl sortd(int,float,int*)”(?sortd@@YAXHPEAMPEAH@Z)函数“private:void u cdecl TableView::jacobi(float(const)[4],float(*const)[4],float*const,int*const,int*,int*,float*)”中引用(?jacobi@TableView@@AEAAXQEAY03M0QEAMQEAHPEAH3PEAM@Z)M:\Lecad2\TremeshBuild\src\Tremesh\TableView.obj有什么想法吗?很难在评论中看到这一点,也许你可以把它放在ideone.com上,并将链接粘贴到这里。或者至少在pastebin.com上。这是Windows吗?@user1220769,在哪里定义了sortId()?如果它是在不同的源文件/对象文件中定义的,请确保也将其链接到。

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