2016-08-10 2 views
6

에 C에서 익명의 구조를 선언은 앞으로 내가 이렇게 뭔가에 따라 변경 할 수 있습니다,이 파일은 자동으로 프로그램을 통해 생성되는</p> <pre><code>typedef struct { ... }A; </code></pre> <p>유사한 익명의 구조와 타사 C 라이브러리가 C++

지금은

void foo(const A & in) 
    { 
    ... 
    } 

예를 들어, 위의 유형의 인수를 수락 C++ 프로젝트에 나는 앞으로 위의 함수를 정의하는 헤더 파일에 선언 어떻게해야합니까?

이 나는 ​​시도했다 :

typedef struct A A; 

또는

struct A; 

과 호기심도

typedef A A; 

.

그러나 그 결과 유형을 재정의하는 데 컴파일 시간 오류가 발생합니다. 감사합니다.

+0

'typedef struct {...} A;'를 정의한 라이브러리의 헤더 파일을 포함 할 수 없습니까? – rjp

+0

그건 익명의'struct'가 아닙니다 (C 표준의 6.7.2.1p13 참조). 익명의'struct'가'struct' 또는'union'의 밖에있을 수 없습니다. – Olaf

+0

C는 C++이 아닙니다. C++ 표준을 사용하십시오. 문제가 무엇인지 분명히 알지 못합니다. 아무 것도 볼 수 없습니다. 'typedef'라는 이름을 사용하면 무슨 문제입니까? – Olaf

답변

6

슬프게도 운이 없네요.

A은 태그가 지정되지 않은 struct의 경우 typedef입니다. 그리고 직접적으로 그 참조 할 수 없기 때문에 당신은 그것을 선언 할 수 없습니다. struct.

생성기를 변경하여 typedef struct A { ... } A;을 출력 할 수 있습니까? 그렇다면 그것은 C와 C++ 모두에서 잘 컴파일 될 것이고, 이 앞으로 C++에서 선언 할 수 있습니다.

그렇지 않으면 두 가지 옵션이 있습니다. #includestruct 선언이 포함 된 파일. 2. struct을 직접 복사하십시오. 분명히 (1) 훨씬 더 바람직합니다.

+2

이름없는 태그가없는'struct'입니다. – Olaf

+0

@Olaf : 도움이됩니다. 나는 정확한 용어를 찾고 있었다. – Bathsheba

+0

그냥 명확히하기 위해 : 나는 C 용어를 사용하고 그냥 추론 : 태그가 누락되었습니다, 그래서 나는 "태그없는"올바른 이름이 될 것이라고 생각합니다. – Olaf

1

형식 별칭을 전달 선언 할 수 없으므로 입력 할 수 없습니다. 실제 유형 만 가능합니다.