2013-05-26 4 views
1

클래스가 있습니다.C++ 클래스에 대한 포인터를 반환합니다.

이 클래스의 멤버에 대한 포인터를 반환하는 함수를 만들어야합니다.

내 클래스는 다음과 같습니다

class clsNode 
{ 
private: 
    wstring m_grapheme; 
    vector <clsNode*> m_Daughters; 
public: 
    clsNode *getNextNode(const udtCharVec &u); 
}; 

내가 시도 다음 찾을 수없는 오버로드 멤버 함수 :

clsNode *clsNode::getNextNode(udtCharVec &u) 
{ 

    if (u.Grapheme == m_grapheme) 
    { 
     return *m_Daughters[0]; 
    } 
    else 
    { 
     return *m_Daughters[1]; 
    } 
} 

컴파일러는 나에게 말한다 "오류 c2511 : clsNode : getNextNode (udtCharVec &를) in clsNode. "

누군가 내가 실수 한 부분을 말할 수 있습니까? 감사합니다.

+3

서명이하는 const를 인수없이 구현입니다. – EGOrecords

답변

4

나는 당신이 의미 생각 : m_Daughters[0] 유형 clsNode*이며 *m_Daughters[0]는 반환 형식 불일치 것이다 타입 clsNode이 될 것

return m_Daughters[0]; 
// ^

때문이다.

clsNode *getNextNode(const udtCharVec &u) 
//     ^^^^^ 
clsNode *clsNode::getNextNode(udtCharVec &u) 
+0

감사합니다. m_Daughters 중 하나를 반환 할 수 있기를 원했습니다. 나는 그것을 편집하고 싶지 않고, 단지 그것을 읽을 필요가있다. 나는 그것을 잘 설명 할 수 있기를 바란다. 내 저장 방법과 검색 방법이 괜찮습니까 아니면 다르게 수행하겠습니까? – user2421725

+0

@ user2421725, 실제로 포인터가 실제로 의미하는 바에 달려 있습니다. 왜 그들을'clsNode'로 직접 저장할 수 없습니까?동적 메모리 할당이 필요한 이유는 무엇입니까? – Shoe

1

클래스 선언 메소드 서명이다 :

또한 함수 서명은 다른 정의 및 구현 clsNode * getNextNode (CONST udtCharVec & U);

하지만 아래의 구현은 다음과 같습니다 clsNode * clsNode :: getNextNode (udtCharVec & U)

참고 선언에서 "CONST". 컴파일러가 하단에 구현 한 선언을 찾을 수 없다는 것을 알려줍니다.

2

여기에 몇 가지 실수가 있습니다. 먼저이 선언

는 함수를 정의 할 때이

clsNode *clsNode::getNextNode(udtCharVec &u) 

서명이 (CONST의 부족을 통지 상이가있는 반면 함수 const가 참조함으로써 인수를 취하는 것을 의미

clsNode *getNextNode(const udtCharVec &u); 

두 번째 것에서).

두 번째 문제는 반환 문에 : 반환 값의

return *m_Daughters[0]; 

유형이 참조가 아닌 포인터합니다 (* 당신이 벡터에서 얻을 포인터가 역 참조)입니다. 이 문제를 해결하려면 다음을 수행하십시오 클래스

return m_Daughters[0]; 
관련 문제