C ++将指针转换为静态方法

时间:2011-09-15 09:18:49

标签: c++ methods static compiler-errors interrupt

我很久没有写C ++代码了;但是现在我必须研究德州仪器F28335 DSP,我正在尝试从C迁移到C ++。 我有以下代码尝试使用类的静态方法初始化中断服务例程:

//type definition for the interrupt service routine
typedef interrupt void (*PINT)(void);
//EPWMManager.h
class EPWMManager
{
public:
    EPWMManager();      
    static interrupt void Epwm1InterruptHandler(void);  
};
//EPWMManager.cpp
interrupt void EPWMManager::Epwm1InterruptHandler(void)
{
 //some code to be called on interruption
}   
//main.cpp
int main(void)
{
    PINT p;
    p = &(EPWMManager::Epwm1InterruptHandler);
    return 0;
 }

编译时我得到以下内容:

  

错误:类型为“void(*)()”的值无法分配给“PINT”类型的实体

我想我错过了一些演员。

3 个答案:

答案 0 :(得分:2)

我认为根本问题在于,将你的作业的RHS加上前缀为p。此外,“PINT”是其他操作系统中的“指向整数的指针”。所以,让我们避免任何潜在的名称冲突。但我认为这对你有用:

// you may have to move "interrupt" keyword to the left of the "void" declaration.  Or just remove it.
typedef void (interrupt *FN_INTERRUPT_HANDLER)(void);

interrupt void EPWMManager::Epwm1InterruptHandler(void)
{
 //some code to be called on interruption
}  

int main(void)
{
    FN_INTERRUPT_HANDLER p;
    p = EPWMManager::Epwm1InterruptHandler; // no ampersand

    // and if for whatever reason you wanted to invoke your function, you could just do this:

   p(); // this will invoke your function.

    return 0;
}

答案 1 :(得分:0)

我认为你在这里有几个不相关的语法错误:据我所知,你的Epwm1InterruptHandler应该返回一个指向类型为interrupt的函数的指针,然后首先从行中删除void

static interrupt void Epwm1InterruptHandler(void);

static interrupt void Epwm1InterruptHandler(void);

然后使p类型为中断,然后像这样放括号:

interrupt p;
p = &(EPWMManager::Epwm1InterruptHandler());

答案 2 :(得分:0)

你不是错过了;在typedef中断后void(* PINT)(void)? 你的代码为我编译。