내가 utilA.cpp에 다음 코드를해야합니다 : utilA.h
라인 0에 struct tm
을 사용하고 있기 때문에이 보인다왜 C++의 forward 선언입니까?
error: variable 'xm::tm time1' has initializer but incomplete type
utilA.cpp를 컴파일 할 때 GCC는 불평
// utilB.h
namespace xm
{
void zoo(struct tm timeval); //<-----line 0
}
// utilA.cpp
#include <utilB.h> //<----line 1
#include <time.h> //<----line 2
namespace xm
{
void foo()
{
struct tm time1 = {0}; //<----line 3
}
}
, 그러나 time.h
을 포함하지 않고 컴파일러는 라인 0에있는 struct tm
을 전달 선언으로 처리하므로 라인 2의 struct tm
은 라인 0의 헤더 안에 xm::tm
으로 처리됩니다.
그래서 C++ 표준은 forward 선언과 같은 함수 매개 변수 유형으로이 struct tm
을 정의합니까? 이것을 설명하는 데 도움이되고 표준의 인용문이 도움이 될 것입니다.
헤더가 헤더에 달려 있으므로 헤더에'#include'을 써라. –
molbdnilo
예, utilB.h에 #include을 추가해야하지만, 거대한 프로젝트의 코드 스 니펫이기 때문에 근본 원인을 찾기 전에 많은 혼란을 겪습니다. –
ZijingWu
이것은 매우 나쁜 프로그래밍 스타일입니다. 무시해. 추신 : 당신은'# include'-s를 맨 위로 옮기려고 했습니까? – i486