Q: 빌더에서 처음으로 STL을 써보려고
Console Wizard를 써서 소스코드를 입력했습니다.
그런데 이상한 컴파일 에러를 내면서 컴파일이 안되네요.
Borland C++ 5.5 Compiler나 gcc(g++)에서는 아무 이상 없이 컴파일되는 코드입니다.
왜 그러죠?
A: #pragma hdrstop 가 없거나 위치가 틀렸습니다.
STL은 Standard "Template Library",
즉 헤더파일로만 이루어진 라이브러리(lib이나 dll 같은 것이 없습니다.)입니다.
(당근, 오픈소스일 수 밖에는 없죠. ^^;)
즉, 모든 코드가 컴파일 타임에 매번 새로 생성되는 구조입니다.
그러므로 헤더파일을 precompiled header로 놓을 수 없습니다.
(STL의 몇 개 안되는 단점중 하나를 들자면 컴파일 타임이 오래걸린다는 거죠.)
다른 헤더 파일을 먼저 인클루드 하신 후,
#pragma hdrstop 을 놓고, 그 다음에 STL 헤더파일들을 인클루드하셔야 합니다.
예를 들어 다음과 같은 식으로 해야 합니다.
//-------------------------------------------------------------------------
#include <vcl.h> // STL과 관련 없는 헤더를 먼저 놓습니다.
#include <cassert> // ANSI C 표준 라이브러리 (예: assert.h)를 인클루드하는 경우는
// 'c'를 앞에다 씁니다.
#pragma hdrstop // STL 헤더를 쓰기 전에 놓습니다. 빌더에서는 반드시 필요합니다.
#include <iostream> // 빌더5 이하에서 STLport를 설치한 경우에는
// 스트림 입출력 헤더 파일도 #pragma hdrstop 이후에 놓아야 하더군요.
#include <algorithm>
#include <vector>
#include <string>
#include "myheader.h" // 그 다음 사용자의 헤더 파일을 맨 나중에 놓으시면 됩니다.
//#pragma hdrstop // 여기다 놓으면 안됩니다!
using namespace std; // 이것도 반드시 필요하지요.
int main()
{
............
............
............
return 0;
}
|