0
#include <linux/input.h>
#include <string.h>

#include <gtest/gtest.h>
#include <string>
class Parent{
public:
    Parent(){
    }
    virtual std::string GetString()
    {
        int amount = 1;
        input_event ev[amount];

        /**
         * This solves the problem
         */
        memset(ev, 0, sizeof(ev[0]));


        ev[0].code = BTN_9;
        ev[0].value = 1;
        char* temp = reinterpret_cast<char*>(ev);
        std::string msg(temp, sizeof(ev[0]) * amount);
        return msg;
    }
};
class Child : public Parent
{
public:
    Child(){
    }
    virtual std::string GetString()
    {
        int amount = 1;
        input_event ev[amount];
        ev[0].code = BTN_9;
        ev[0].value = 1;
        char* temp = reinterpret_cast<char*>(ev);
        std::string msg(temp, sizeof(ev[0]) * amount);
        return msg;
    }

};

class Child2 : public Parent
{
public:
    Child2(){
    }
    virtual std::string GetString()
    {
        std::string temp(Parent::GetString());
        return temp;
    }

};

TEST(CastToString, test)
{
    Parent parent = Parent();
    Child child1 = Child();
    Child2 child2 = Child2();
    std::string pString(parent.GetString());
    std::string c1String(child1.GetString());
    std::string c2String(child2.GetString());
    EXPECT_EQ(pString, c1String);
    EXPECT_EQ(pString, c2String);
}

サンプル全体をコピーしました。問題は、Child2sGetString関数の呼び出しにあります。それは常に異なる値を返すので、私はいくつかの割り当ての問題があると思いますが、私はそれを理解することはできません。

4

1 に答える 1

3

エラーはここにあると思います

  std::string msg(temp, sizeof(ev) * amount);

する必要があります

  std::string msg(temp, sizeof(ev[0]) * amount);

(両方の場所)。

配列サイズが間違っていたため、文字列に余分なガベージバイトが含まれていたため、それらは等しく比較されませんでした。

于 2012-09-12T11:33:03.490 に答える