错误 C2660:'MouseListener::MousePressed':函数不带 4 个参数

error C2660: 'MouseListener::MousePressed' : function does not take 4 arguments

我正在为一项学校作业开发一个 C++ 伪图形按钮。 我用的是观察者模式。

在Button.cpp中:

void Button::notify()
{
    for (int iterator = 0; iterator < listeners.size(); iterator++)
    {
        listeners[iterator]->MousePressed(*this, x, y, isLeft);
    }
}

如您所见,MousePressed 函数接收 4 个参数,但我得到:

function does not take 4 arguments

在Button.h中:

struct MouseListener
{
    virtual void MousePressed(Button &b, int x, int y, bool isLeft) = 0;
};

class Button : public Label
{
public:

    vector <MouseListener*> listeners;
.
.
.

主要内容:

struct MyListener : public MouseListener
{
    MyListener(iControl &c) : _c(c) { }
    void  MousePressed(Button &b, int x, int y, bool isLeft)
    {
        _c.setForeground(Color::Red);
    }
private:
    iControl &_c;
};

int main(VOID)
{

错误:

  • Error 2 error C2061: syntax error : identifier 'Button' c:\users\gonen\unitedproj\unitedproj\Button.h 14 1 unitedProj

  • Error 4 error C2061: syntax error : identifier 'Button' c:\users\gonen\unitedproj\unitedproj\Button.h 14 1 unitedProj

  • Error 5 error C2660: 'MouseListener::MousePressed' : function does not take 4 arguments C:\Users\Gonen\unitedProj\unitedProj\Button.cpp 24 1 unitedProj

前两个用于main中的声明,最后一个用于Button.cpp中函数的使用。 帮助?当我用鼠标光标站在 Button.cpp 中的函数上时,我得到:

void MouseListener::MousePressed(Button &b,int x,int y, bool isLeft)

我只需要它工作,这样我就可以继续前进,让其他组成员使用他们实现的控件中的按钮...然后继续我需要做的下一个事情:-(

编辑:感谢您的快速回答。 我试着按照你的要求去做。现在我得到:

*Error 3 error LNK2019: unresolved external symbol main referenced in function __tmainCRTStartup C:\Users\Gonen\unitedProj\unitedProj\MSVCRTD.lib(crtexe.obj) un‌​itedProj

Button在声明MousePressed的地方没有声明,所以不能使用。我建议你应该使用前向声明。

class Button; // add this line

struct MouseListener
{
    virtual void MousePressed(Button &b, int x, int y, bool isLeft) = 0;
};

class Button : public Label
{
public:

    vector <MouseListener*> listeners;
.
.
.