Передача по ссылке c ++ с классом в пространстве имен

Я использую 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&)

ТИА,
Кит

0

Решение

Проблема заключается в строке № 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)

и тадааааа! Мы заставили это работать.

2

Другие решения

Ваш декларация функции Read отличается от определение из Read Вы предоставили.

Декларация:

int Read(int crumb, int& state);

И определение:

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

Вы должны решить, какой из них вы хотите использовать ссылка или значение), и измените другой соответственно. Кажется, что ссылка решение является единственным правильным выбором в этой ситуации, так как ваша функция меняет значение state аргумент.

2

По вопросам рекламы [email protected]