2013-01-03 3 views
2

이 코드는 VS2010에서 컴파일되며 모든 컴파일러에서 사용됩니다.VS2010의 "ambigous symbol"오류가 아래 코드에서 나타나는 이유는 무엇입니까?

#include <iosfwd> 
using namespace std; 
class ostream; 
int main() {} 

같은이 코드

#include <iosfwd> 
using namespace std; 
int main() { class ostream; } 

으로 발생하지만이 코드는 오류 C2872을 생성합니다 'ostream에': 모호한 기호를

#include <iosfwd> 
using namespace std; 
class ostream; 
int main() { class ostream; } 
+1

[사용하지 마십시오'using namespace std;'] (http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-a-bad-practice-in-c) – ipc

답변

6

범위에 ostream라는 두 개의 클래스가 있습니다 ::std::ostream::ostream. 당신이 선언 전달하려는 경우 올바른 네임 스페이스에 그것을 할 수 있습니다 ostreambasic_ostream의 타입 정의가 아닌 별도의 클래스이기 때문에

#include <iosfwd> 
using namespace std; 
namespace std { 
    class ostream; 
} 
int main() { class ostream; } 

어쨌든, 문제는이 경우에 작동하지 않습니다. iosfwd 헤더를 포함하면 앞으로 모든 것을 선언 할 수 있습니다.

관련 문제