вызов gmock для неявно удаленного конструктора копирования

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

// mock_word.h
class MockWord : Word {
public:
    MockWord(const std::string word) : Word(word) {};
    MOCK_METHOD0(pigLatinify, std::string(void));
};

// strings.h
template <typename Word>
class Strings {
...
private:
    std::vector<Word>* words = new std::vector<Word>();
public:
    // This should call the implicit copy constructor
    void addWord(const Word word) {
        this->words->push_back(word); 
    };
...
};

// strings_test.cpp
class StringsTest : public ::testing::Test {
protected:
    Strings<MockWord>* strings;
public:
    virtual void SetUp() {
        strings = new Strings<MockWord>();
    };
    virtual void TearDown() {
        delete strings;
    };
};

TEST_F(StringsTest, StringIsAllPigLatinifiedNicely) {
    MockWord mockWordA("beast");
    MockWord mockWordB("dough");

    // Set some expectations for the Mock
    EXPECT_CALL(mockWordA, pigLatinify()).Times(AtLeast(1)); 
    EXPECT_CALL(mockWordB, pigLatinify()).Times(AtLeast(1)); 

    strings->addWord(mockWordA);
    strings->addWord(mockWordB);
    ...
};

Теперь я, вероятно, мог бы скомпилировать и работать, если бы я преобразовал mockWordA и mockWordB из автоматических переменных в указатели, но это не тот интерфейс, который я хочу предоставить.

Точная ошибка, которую я получаю:

error: call to implicitly-deleted copy constructor of 'MockWord'
    strings->addWord(mockWordA);
                     ^~~~~~~~~
mock_word.h:11:9: note: copy constructor of 'MockWord' is implicitly     deleted because field 'gmock0_pigLatinify_11' has a deleted copy     constructor
    MOCK_METHOD0(pigLatinify, std::string(void));

person wulfgarpro    schedule 15.01.2017    source источник
comment
моки из гугл мока не копируются   -  person PiotrNycz    schedule 16.01.2017
comment
Возможный дубликат Могу ли я скопировать макет объекта Google после настройки ожидания?   -  person PiotrNycz    schedule 16.01.2017
comment
Итак, я могу выполнить этот базовый тест, только сделав свой объект типом указателя? Это кажется ограничительным.   -  person wulfgarpro    schedule 16.01.2017


Ответы (1)


Я решил проблему, изменив интерфейс функции на Strings::addWord(Word* word), что мне кажется ограничительным, учитывая, что я бы предпочел не использовать указатели в таком базовом примере.

person wulfgarpro    schedule 15.01.2017