2016-08-17 1 views
-3

첫째로 클래스부터 구조체를 정의 내 코드입니다 class_child.h :C++, 아래로 통과 이미 모두 여기의 다른

#include "class_parent.h" 

    class class_child: public class_parent 
    { 
    public:  
    void function_of_child(); 
    class_child(); 
    ~class_child(); 
    }; 

cl ass_child.cpp : messageStruct_ [1-3]를 예상 할 수 있던, 정의되지 않은 것을

#include "stdafx.h" 
    #include "class_child.h" 
    #include "class_parent.h" 
    #include <iostream> 

    void class_child::function_of_child() 
    { 
     function_of_parent();  

     std::cout << " Child Class says: " << messageStruct_one.message         //here I want to use messageStruct_[one-three] 
       << " " << messageStruct_two.message << " " << messageStruct_three.message << std::endl; //which was defined in the parent class  
     std::cout << " " << x << "\n\t" << std::endl; 
    } 

내가 그것을 컴파일하려면, 그것은 말한다. 구조체는 클래스와 유사하지만 parent_class_function에서 messageStruct_를 사용하는 방법을 찾을 수 없다는 것을 알고 있습니다. 자식 클래스에서 newStruct를 사용하여 messageStruct_를 사용하면 문제가 없지만 부모 클래스의 messageStruct_를 사용하고 싶습니다. 그게 가능한가?

미리 감사드립니다.

+0

'class_parent.h'헤더의 내용도 표시 할 수 있습니까? –

+0

원하는 것을 더 자세히 설명 할 수 있습니까? 'newStruct'는 부모 클래스와 자식 클래스에서 사용할 수있는 유형입니다. 'messageStruct ...'는 함수에 대한 지역 변수입니다 (여러분이 알고있는 것처럼 보입니다). 클래스 멤버로 정의하면 액세스 할 수 있습니다. 이게 니가 원하는거야? 귀하의 설명은 매우 모호합니다. – infiniteRefactor

+0

귀하의 코드는 newStruct 구조체를 부모 함수 내에서 로컬로 선언합니다. 이것이 당신의 하위 클래스가 세 개의 구조체를 정의하지 않은 이유이다. 범위가 문제입니다. –

답변

0

부모 함수의 구조체가 로컬로 정의됩니다. 기능 범위를 벗어나서는 사용할 수 없습니다. 부모 함수가 이러한 구조체를 만드는 함수가되기를 원한다면 구조체를 생성하고 반환 할 수있는 몇 가지 메소드가있을 수 있습니다. 같은

newStruct class_parent::create_new_struct(std::string text) 
{ 
    struct newStruct result; 
    result.message = text; 
    return result; 
} 

그런 다음 이렇게

messageStruct_one = create_new_struct("some text"); 
+0

Buut를 공용으로 정의한 다음 class_parent_function에서 messageStruct_one.message를 편집 한 다음 하위 클래스로 전달할 수 있습니까? 편집 : 바보 같은 질문, 과정의 물론 ... – Moe

0

변수 messageStruct_one, messageStruct_two 같은 자녀에 전화를하고, messageStruct_three는 방법 class_parent::function_of_parent에 지역이다.

다른 메서드에서 해당 메서드를 볼 수있게하려면 부모 클래스의 멤버로 protected으로 정의해야합니다.

class class_parent 
    { 
    public: 
     struct newStruct 
     { 
     std::string message; 
     }; 
     void function_of_parent(); 
     class_parent(); 
     ~class_parent(); 
    private: 
     int y = 1; 
    protected: 
     int x = 0; 
     newStruct messageStruct_one = { "Some text, " }; 
     newStruct messageStruct_two = { " even more text " }; 
     newStruct messageStruct_three = { " ...foo" }; 
    }; 
+0

좋아, 그건 내가 이미 밖으로 시도하고 그것이 효과가 있다면 어쩌면 그것을 할 수있는 경우에만 시도 싶었어요 (내가 쓴 질문에. 단지 그것을 더 깔끔하게 배열하고 싶었다). 하지만 함수에서 messageStruct_one.message를 편집 한 다음 하위 클래스로 전달할 수 있습니까? 편집 : 멍청한 질문, 물론 그것이 효과가 ... – Moe