2011-02-27 2 views
1
나는이 코드 조각을 작성했습니다

:다른 함수 내에서 익명 네임 스페이스의 함수를 호출 할 수없는 이유는 무엇입니까?

namespace { 

void SkipWhiteSpace(const char *&s) { 
    if (IsWhiteSpace(*s)) { 
    s++; 
    } 
} 

bool IsWhiteSpace(char c) { 
    return c == ' ' || c == '\t' || c == '\n'; 
} 

} // namespace 

문제는 컴파일러가 IsWhiteSpace()was not declared in this scope을 불평이다. 하지만 왜? 물론 네임 스페이스는 익명이지만 함수는 여전히 동일한 네임 스페이스 내에 있습니다.

답변

6

SkipWhiteSpace 이후에 IsWhiteSpace을 정의했기 때문일 수 있습니다.

편집 : 성공적으로 다음 코드를 컴파일

는 :

#include <iostream> 

using namespace std; 

namespace 
{ 
    void Function2() 
    { 
     cout << "Hello, world!" << endl; 
    } 

    void Function1() 
    { 
     Function2(); 
    } 
} 

int main() 
{ 
    Function1(); 
} 

은 당신이 언급 한 오류 Function1Function2 이상의 결과를 이동합니다. 따라서 SkipWhiteSpace에는 IsWhiteSpace에 대한 지식이 없기 때문에 가능합니다. 함수를 미리 선언하고 나중에 정상적으로 정의하면 다음과 같이 해결할 수 있습니다.

namespace 
{ 
    void Function1(); 
    void Function2(); 

    void Function1() 
    { 
     Function2(); 
    } 

    void Function2() 
    { 
     cout << "Hello, world!" << endl; 
    } 
} 
+1

최근에 너무 많은 자바를 해킹했습니다 .--). – helpermethod

관련 문제