我有两个标题(.hh)文件,并且在这两个文件中都定义并实现了一些功能:
我想要它所以从头文件A中的实现调用另一个头文件的函数(让我们称之为B)。
这就是我所拥有的:
//headerA.hh
LSQUnit<Impl>::read(...args....)
...
callfunction(...args...);
}
其中call函数的实现在另一个头文件中,如下所示:
// 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中的内容?
答案 0 :(得分:2)
似乎callFunction
是模板类的非静态成员函数。调用它的核心方式是
LSQUnit<Impl> something;
something.callFunction(...);
这意味着您需要拥有callFunction
的类类型的对象。在这种情况下something
。
此语法
LSQUnit<Impl>::callfunction(...args...)
用于调用static成员函数。