1

我有 2 个标头 (.hh) 文件,并且在这两个文件中定义和实现了一些函数:

我想要它从头文件A中的实现中调用另一个头文件的函数(我们称之为B)。

这是我所拥有的:

//headerA.hh
LSQUnit<Impl>::read(...args....)
   ...
callfunction(...args...);
}

调用函数的实现在另一个头文件中,如下所示:

// headerB.hh   
template<class Impl>
    inline void
    BaseDynInst<Impl>::callfunction (...args...){
       ....
    }

我在 headerA.hh 中添加了这些:

#include "headerB.hh"
....
void call function (...args...)

但我在 headerA.hh 中得到了对 callfunction 的未定义引用

我也试过这些:

当我从 headerA.hh 调用它时

callfunction<BaseDynInst> callfunction (...args...)

或者在我的 headerB.hh 中添加这个实现:

LSQUnit<Impl>::callfunction(...args...)

但他们给了我更多的错误。

我知道将实现放在 .hh 中可能并不理想,但我使用的模拟器不是我创建的,所以我无法更改它,因为它会使事情变得更糟。

是否有可能是我想要的,或者唯一的解决方案是在 headerA.hh 中实现该函数?我想避免这种情况,因为它调用了所有存在于 headerB.hh 中的许多其他人?

4

1 回答 1

2

它似乎callFunction是模板类的非静态成员函数。正确的称呼是

LSQUnit<Impl> something;
something.callFunction(...);

这意味着您需要一个 拥有的类类型的对象callFunction。在这种情况下something


这种语法

LSQUnit<Impl>::callfunction(...args...)

用于调用静态成员函数。

于 2013-04-30T15:07:34.177 回答