옥히독히
282
2021-10-15 08:44:39
6
166

구조체를 전역변수로 쓰려면 어떻게 해야하나요?


헤더파일에 구조체를 여러개 만들고


다른 클래스들에서 전역으로 쓰고 싶은데요


어떤 방법들이 있을까요?

0
  • 답변 6

  • 옥히독히
    282
    2021-10-15 11:28:11
  • 안전라이딩
    1k
    2021-10-15 12:52:27

    myData.h

    #pragma once
    
    struct Person {
      char szName[64];
      int nAge;
    };
    
    struct Book {
      char szName[64];
      char szAuthor[64];
    };
    
    extern struct Person person;
    extern struct Book book;


    myData.cpp

    #include "myData.h"
    
    Person person;
    Book book;


    main.cpp

    #include "myData.h"
    #include <iostream>
    
    class A {
    public:
      void foo() {
        person.nAge = 100;
      }
    };
    
    class B {
    public:
      void foo() {
        std::cout << person.nAge;
      }
    };
    
    int main() {
      A().foo();
      B().foo();
    
      return 0;
    }
    


  • 옥히독히
    282
    2021-10-15 14:08:52

    안전라이딩

    혹시 MFC에서는 다르게 사용해야 하나요?

    Define.h

    typedef struct _Test_Act
    {
    bool bTest1;
    float fTest2;
    }Test_Act;
    
    extern  struct Test_Act g_stTest;

    Define.cpp

    #include "Define.h"
    
    Test_Act g_stTest;

    위 처럼하면 

    error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다.

    error C2146: 구문 오류: ';'이(가) 'g_stTest' 식별자 앞에 없습니다.

    이렇게 에러가 발생합니다


  • 안전라이딩
    1k
    2021-10-15 14:45:58
    struct Test_Act { ........};
    extern Test_Act g_stTest;

    하시면 됩니다.

    c++ 에서는 굳이 typedef 하실 필욘 없습니다.

    c 에서 tagname 의 alias 를 만드는 이유는 다음 링크 참조하세요.

    Lookup and name spaces - cppreference.com

  • 옥히독히
    282
    2021-10-15 15:07:36

    안전라이딩 

    그래도 안되네요ㅠㅠ

    Define.h

    struct Test_Act
    {
    bool bTest1;
    float fTest2;
    };
    
    extern Test_Act g_stTest;

    Define.cpp

    #include "Define.h"
    
    Test_Act g_stTest;

    이렇게 해도 

    error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다.

    error C2146: 구문 오류: ';'이(가) 'g_stTest' 식별자 앞에 없습니다.

    이 에러가 계속 나오네요ㅠ

  • 로그인을 하시면 답변을 등록할 수 있습니다.