1

ほら、名前空間と関数を の前に配置しmain、これは正常にコンパイルされました。

#include <iostream>
#include <exception>
#include <string>
using namespace std;
//==================================================
namespace Bushman{
    void to_lower(char* s)
    // Replace all chars to lower case.
    {
        const int delta = 'a' - 'A';                
        while(*s){
            if(*s >= 'a' && *s <= 'z') *s -= delta;         
            ++s;
        }
    }
}
//==================================================
int main()
// entry point
try{
    namespace B = Bushman; // namespace alias
    void B::to_lower(char* s);  
    char* str = "HELLO, WORLD!";
    B::to_lower(str);   
    printf("%s\n",str);
}
catch(exception& e){
    cerr << e.what() << endl;
    return 1;
}
catch(...){
    cerr << "Unknown exception." << endl;
    return 2;
}

しかし、名前空間と関数を の後に配置すると、mainこれをコンパイルできません。

#include <iostream>
#include <exception>
#include <string>
using namespace std;
//==================================================
int main()
// entry point
try{
    namespace B = Bushman; // namespace alias
    void B::to_lower(char* s);  
    char* str = "HELLO, WORLD!";
    B::to_lower(str);   
    printf("%s\n",str);
}
catch(exception& e){
    cerr << e.what() << endl;
    return 1;
}
catch(...){
    cerr << "Unknown exception." << endl;
    return 2;
}
//==================================================
namespace Bushman{
    void to_lower(char* s)
    // Replace all chars to lower case.
    {
        const int delta = 'a' - 'A';                
        while(*s){
            if(*s >= 'a' && *s <= 'z') *s -= delta;         
            ++s;
        }
    }
}

2番目のケースで名前空間と関数の宣言を指定するのはどのように正しいですか?

4

2 に答える 2

5

次の前に、名前空間内で関数を前方宣言できますmain

namespace Bushman
{
  void to_lower(char* s);
}    

int main()
{
  // as before
}
于 2013-07-02T13:11:03.303 に答える
0

あなたが何を求めているのかよくわかりませんが、通常の関数/変数と同じだと思います。

namespace Bushman{}前に追加main()してから完全に宣言すると機能するはずです。

于 2013-07-02T13:11:57.157 に答える