순환 참조 문제 (예 : A.h 및 B.h # 서로 포함)가 발생했으며 어떤 사람들은 #pragma를 사용하지 못하도록 한 번 조언했습니다. 그러나이 솔루션은 아직 작동하지 않는 것으로 보입니다. 무슨 일이 일어나고#pragma once and #include issues
더 이상 (심지어 A.cpp에서) 아 이외의 파일 인식된다 클래스 A는 동일한는
은 내가 당신에게 코드를 보여 드리죠 클래스 B의 발생 :
을아
#pragma once
#include "B.h"
class A {
public: B* b;
};
BH
#pragma once
#include "A.h"
class B {
public: A* a;
};
오류 추적 다음으로 판독 동일한 A.cpp 로
A.cpp
#include "stdafx.h"
#include "A.h"
#include "B.h"
B.cpp이다 :
1> B.cpp 1> c : \ users \ user \ documents \ visual studio 2010 \ projects \ envmodel \ test \ bh (5) : 오류 C2143 : 구문 오류 : ''이 (가) 없습니다. 예 : ''1> c : \ users \ user \ documents \ visual 스튜디오 2010 \ projects \ envmodel \ test \ b.h (5) : 오류 C4430 : 누락 유형 지정자 - int가 가정됩니다. 참고 : C++는 1> c : \ users \ user \ documents \ visual studio 2010 \ projects \ envmodel \ test \ b.h (5)를 지원하지 않습니다. 오류 C4430 : 누락 유형 지정자가 있다고 가정합니다. 참고 : C++은 default-int 1> A.cpp 1> c : \ users \ user \ documents \ visual studio 2010 \ projects \ envmodel \ test \ bh (5)를 지원하지 않습니다. 오류 C2143 : 구문 오류 : 이 없습니다. ';' 예 : ''1> c : \ users \ user \ documents \ visual studio 2010 \ projects \ envmodel \ test \ b.h (5) : 오류 C4430 : 누락 된 형식 지정자가 있다고 가정합니다. 참고 : C++는 1> c : \ users \ user \ documents \ visual studio 2010 \ projects \ envmodel \ test \ b.h (5)를 지원하지 않습니다. 오류 C4430 : 누락 유형 지정자가 있다고 가정합니다. 참고 : C++ 기본-INT 지원하지 않습니다
명확히하기 내가 좋아하는 것 두 가지 더있다 :
방법 및 Visual Studio 2010 년 #INCLUDE "에 stdafx.h"를 사용하는 경우 (정말이 IDE가 싫지만 C++에서 잘 작동하는 유일한 것으로 보인다 - Netbeans은이 언어로 된 총 휴지통 임)
#pragma once를 올바르게 사용하는 방법은 무엇입니까? 난 그냥 각 파일의 첫 번째 줄에 넣어 것이라고 가정합니다 (글쎄, 분명히 내 문제를 해결하지 못합니다!). 또한 #include "stdafx.h"앞이나 뒤에 삽입해야합니까? 참고 : #pragma를 stdafx.h에 한 번 넣지 않았습니다.
감사합니다.
편집 : 세미콜론을 잊어 버렸기 때문에 원본 오류 추적이 부 풀렸습니다. Edit2 : 포인터를 사용하는 것을 잊어 버렸습니다. 내 실제 프로그램은 일반 객체 값 대신 포인터를 사용 했으므로 작은 예제를 만들기 위해 서두르지 않았다.
클래스 정의 끝에 세미콜론이 필요합니다. – shf301
게시물은 게시물 당 하나의 질문을 가져야합니다. 더 궁금한 점이 있으면 추가 게시물을 작성하십시오. – mydogisbox
헤더 파일의'# ifndef'와'# define' 지시어에 대해 어디에서'#pragma once'를 했습니까? - "각 파일의 첫 번째 줄에 넣었 으면 좋겠다." 그러나'# define' 지시어를 따라 가면 안됩니까? – cmo