Как использовать 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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