2011-02-27 18 views
1

私は、コードのこの作品を書いた:匿名の名前空間の関数を別の関数から呼び出せないのはなぜですか?

namespace { 

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

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

} // namespace 

問題はコンパイラがwas not declared in this scopeIsWhiteSpace()ことを不平を言うことです。しかし、なぜ?確かに、名前空間は匿名ですが、関数は同じ名前空間内にありますか?

答えて

6

IsWhiteSpaceSkipWhiteSpaceの後に定義している可能性があります。

編集:

#include <iostream> 

using namespace std; 

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

    void Function1() 
    { 
     Function2(); 
    } 
} 

int main() 
{ 
    Function1(); 
} 

はあなたが言及したエラーでFunction1Function2以上の結果を移動:

私は正常に次のコードをコンパイル。だから、SkipWhiteSpaceIsWhiteSpaceの知識がないからです。これを解決するには、あらかじめ関数を宣言してから、次のように通常通り定義してください:

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

    void Function1() 
    { 
     Function2(); 
    } 

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

最近、あまりにも多くのJavaをハッキングしました;-)。 – helpermethod

関連する問題