我正在使用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&amp;)
TIA, 基思
答案 0 :(得分:2)
问题在于第13行。
int Read(int crumb, int& state);
您提供了一个函数Read,它接受一个int和一个int的地址。
并在第30行,int hwmgr::Read(int crumb, int state)
您定义了一个接受两个int的函数Read。
由于您提供不同类型的参数,因此两种方法都不同。所以编译器会给你错误:'int clshw :: hwmgr :: read(int,int)'的原型与类'clshw :: hwmgr'中的任何一个都不匹配
请修正这样的定义:
在第30行,写下:
int hwmgr::Read(int crumb, int &state)
和tadaaaaa!我们已经成功了。
答案 1 :(得分:2)
您的声明功能Read
与您提供的Read
的定义不同。
宣言:
int Read(int crumb, int& state);
定义:
int hwmgr::Read(int crumb, int state)
您必须决定要使用哪一个(通过引用或值传递状态),并相应地更改另一个。在这种情况下,似乎引用解决方案是唯一正确的选择,因为您的函数会更改state
参数的值。