模板功能参数

时间:2011-08-15 04:54:21

标签: c++ templates

修改:已解决。只是一个定义错误的愚蠢秩序......

所以我在一个名为 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)也不起作用:

错误:嵌套名称说明符中使用的“全局”类型不完整

任何帮助都非常有用。

1 个答案:

答案 0 :(得分:1)

在全局命名空间中听起来像random一样,所以你需要像Global::random.

那样调用它