修改:已解决。只是一个定义错误的愚蠢秩序......
所以我在一个名为 Action 的类的标题中有一个看起来像这样的函数:
template <class Attacker, class Defender>
static int attack_result (Attacker A, Defender D) {
//<snip>
if (random(100) < res)
return 1;
//etc.
}
我在编译时得到了这个:
错误:“random”没有依赖于模板参数的参数,因此必须提供“random”声明 注意:(如果使用'-fpermissive',G ++将接受您的代码,但不允许使用未声明的名称)
函数random()在一个名为 Global 的静态类中声明,如下所示:
extern float random(int);
我从名为 NPC 和播放器的类中调用Action :: attack_result(...),这两个类都派生自一个名为 Creature的类即可。我不认为这是至关重要的信息,但如果是的话,我会提到它。 Action :: attack_result的参数都是Creature类。
我明白为什么会抛出这个错误,但我不确定如何修复它。我尝试在Action标题中声明Global,我尝试使用关键字“using”...我不能这样:
if (this->random(100) < res)
因为我收到以下错误(生物,NPC,播放器是静态的[并且必须是]):
错误:'this'不适用于静态成员函数
去 Global :: random(100)也不起作用:
错误:嵌套名称说明符中使用的“全局”类型不完整
任何帮助都非常有用。
答案 0 :(得分:1)
在全局命名空间中听起来像random一样,所以你需要像Global::random.