0

我正在使用 g++ 4.4.1 并且在命名空间内的类中通过引用传递时遇到问题。我在下面创建了能够演示我的问题的测试程序,并且希望有人知道它为什么无法编译

#include <stdio.h>

namespace clshw
{
    class hwmgr
    {
    private:
        hwmgr() {};

    public:
        ~hwmgr() {};
        static hwmgr* Instance();
        int Read(int crumb, int& state);

    private:
        static hwmgr* instance;
    };
}

namespace clshw
{
    hwmgr* hwmgr::instance = NULL;

    hwmgr* hwmgr::Instance()
    {
        instance = new hwmgr;
        return instance;
    }

    int hwmgr::Read(int crumb, int state)
    {
        state = true;
        return 1;
    }
}

using namespace clshw;

hwmgr *hw = hwmgr::Instance();

int main()
{
    int state;
    int crumb;

    int ret = hw->Read(crumb, state);
}

编译的错误是:

test7.cpp:30: 错误:'int clshw::hwmgr::Read(int, int)' 的原型与类'clshw::hwmgr' test7.cpp:13 中的任何内容都不匹配:错误:候选者是:int clshw ::hwmgr::Read(int, int&)

TIA,基思

4

2 回答 2

2

问题出在第 13 行。

int Read(int crumb, int& state);

您提供了一个函数 Read,它接受一个 int 和一个 int 地址。

在第 30 行, int hwmgr::Read(int crumb, int state)您定义了一个 Read 函数,它接受两个 int。

由于您提供不同类型的参数,因此两种方法都不同。所以编译器会给你错误:'int clshw::hwmgr::Read(int, int)' 的原型与类 'clshw::hwmgr' 中的任何内容都不匹配

请像这样修复定义:

在第 30 行,写下:

int hwmgr::Read(int crumb, int &state)

和tadaaaaa!我们已经成功了。

于 2013-07-24T19:45:30.943 回答
2

您的函数声明与您提供的定义Read不同。Read

声明:

int Read(int crumb, int& state);

以及定义:

int hwmgr::Read(int crumb, int state)

您必须决定要使用哪一个(通过引用或通过传递状态),并相应地更改另一个。在这种情况下,参考解决方案似乎是唯一合适的选择,因为您的函数会更改state参数的值。

于 2013-07-24T20:42:08.060 回答