2012-09-12 5 views
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); 
} 

방금 ​​전체 샘플을 복사했습니다. 문제는 Child2s GetString 함수를 호출 할 때 발생합니다. 항상 다른 값을 반환하므로 할당 문제가 있지만 가정 할 수 없습니다.부모의 가상 함수 호출

+0

'ev' 정의 란 무엇입니까? –

+0

가능한 경우 편집기 및 브라우저의 복사하여 붙여 넣기 기능을 사용해보십시오. 현재 양식의 코드는 컴파일되지 않습니다. – hvd

+0

@hvd 왜 그런 말을합니까? – john

답변

3

나는

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

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

(두 곳)해야 오류가 여기에있다 생각합니다.

배열 크기가 잘못되어 문자열에서 여분의 가비지 바이트가 발생했기 때문에 동일하지 않습니다.

+0

변경되었지만 도움이되지 않았습니다. –

+1

글쎄, 두 함수의 내용을 'std :: string msg ("testing")과 같이 정상적으로 변경하는 것이 좋습니다. 리턴 msg;'. 이렇게하면 문제의 범위를 좁히는 데 도움이됩니다. 또는 디버거를 사용할 수도 있습니다. – john

+0

정상적인 문제는이 문제를 좁히기 위해서입니다. 어떻게 든 캐스팅이 그 원인입니다. 디버거가 나에게 2 개의 다른 문자열을 보여 주며, 함수에서 정말로 그걸로 무엇을 해야할지 모르지만, 그것이 근본적인 문제라고 생각했습니다. –