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);
    ...
};

现在,如果我将自动变量转换为指针mockWordAmockWordB从指针转换,我可能会感到满意并且可以工作,但这不是我想要提供的接口。

我得到的确切错误是:

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));
沃夫加普罗

我通过更改函数接口解决了这个问题,Strings::addWord(Word* word)因为我不想在这样的基本示例中使用指针,但对我来说,函数接口似乎是限制性的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

隐式与显式删除副本构造函数

错误:使用auto调用unique_ptr的隐式删除副本构造函数

尝试将参数传递给方法时出现“调用隐式删除的副本构造函数”错误

调用隐式删除的默认构造函数

拦截C ++隐式副本构造函数,或调用其功能

构造函数隐式删除

三元允许隐式调用显式副本构造函数吗?

您不能在副本构造函数中隐式调用的方法

为什么(已删除)副本构造函数比隐式转换更可取?

隐式删除的副本构造函数编译错误,返回的指针值

隐式调用复制构造函数?

构造函数异常和隐式删除

不建议使用的隐式声明的副本构造函数

隐式声明的副本构造函数与隐式定义的副本构造函数之间有什么区别?

为什么类中的ostringstream类型的成员导致“调用隐式删除的复制构造函数”错误?

隐式与显式默认构造函数调用

C ++隐式和显式继承构造函数调用

在构造函数中调用this()隐式调用super()是真的吗?

为什么C ++隐式调用父默认构造函数?

在Main()之前调用的隐式静态构造函数

隐式调用超类中的无参数构造函数

隐式构造函数调用还是什么?

如何隐式调用父类的构造函数

隐式调用函数

隐式构造函数与“空”构造函数

默认构造函数与隐式构造函数

为什么在C ++ 11或C ++ 14中,当我声明移动赋值运算符时,编译器会隐式删除副本构造函数?

Scala隐式构造函数

关于隐式声明的副本构造函数的引用在逻辑上不清楚