Как использовать gmock MOCK_METHOD для ссылки на перегруженный объект? [дубликат]C++

Программы на C++. Форум разработчиков
Anonymous
Как использовать gmock MOCK_METHOD для ссылки на перегруженный объект? [дубликат]

Сообщение Anonymous »

У меня есть ссылка на объект, перегруженная для возврата значения, например:

Код: Выделить всё

class MyClass : public MyClassInterface {
public:
virtual ~MyClass() override;
operator const int&() const override {
return m_value;
}
private:
int m_value{};
};
чтобы получить значение с помощью:

Код: Выделить всё

MyClass myclass;
int val = myclass;
Теперь я хотел бы высмеять этот метод оператора и нашел, как использовать gmock MOCK_METHOD для перегруженных операторов? Я проверил пример следующим образом:

Код: Выделить всё

class Foo {
public:
virtual ~Foo() {}
virtual int operator[](int index) = 0;
};

class MockFoo : public Foo {
public:
MOCK_METHOD(int, BracketOp, (int index));
virtual int operator[](int index) override { return BracketOp(index); }
};
Компилируется без ошибок. Теперь я пытаюсь изменить этот пример в соответствии со своими потребностями:

Код: Выделить всё

class Bar {
public:
virtual ~Bar() {}
virtual operator const int&() = 0;
};

class MockBar : public Bar {
public:
MOCK_METHOD(int, RefOp, ());
virtual operator const int&() override { return RefOp(); }
};
Но теперь я получаю ошибку компиляции:

Код: Выделить всё

error: returning reference to temporary [-Werror=return-local-addr]
1173 |     virtual operator const int&() override { return RefOp(); }
|                                                     ~~~~~^~
Что я делаю не так? Как я могу сделать так, чтобы класс Bar компилировался как класс Foo?

Подробнее здесь: https://stackoverflow.com/questions/782 ... -reference

Вернуться в «C++»