2017-02-11 2 views
-2

"color.h"という名前のヘッダーと "colors.cpp"というソースファイルの2つのファイルが必要です。名前空間clrの内部のヘッダファイルで、私は3つの関数のプロトタイプを作成しようとしています。そして、それらをcppファイルで定義したいと思います。何らかの理由で、コンパイラはプロトタイプを作成したり、関数を定義したりせず、期待される主な式を得ます。私はこれが本質的に何を意味しているのか知っていますが、なぜそれが起こるのかということに関しては失われています。ヘッダーとcppで期待される一次式

#include "colors.h" 
#include <iostream> 

namespace clr{ 

    void set(color c){ 
     std::cout << c; 
    } 
    void print(color c,std::string s){ 
    } 
    void frame(useconds_t usec){ 
    } 
}; 

ヘッダ

#ifndef COLOR_H 
#define COLOR_H 
#include <string> 
#include <iostream> 
#include <unistd.h> 
using namespace std; 

namespace color { 

    string black = "\033[0;30m"; 
    string red = "\033[0;31m"; 
    string green = "\033[0;32m"; 
    string yellow = "\033[0;33m"; 
    string blue = "\033[0;34m"; 
    string magenta = "\033[0;35m"; 
    string cyan = "\033[0;36m"; 
    string white = "\033[0;37m"; 
    string reset = "\033[0;39m"; 

}; 

namespace clr{ 

    void clr:: set(color c); 

    void print(color c, std::string s); 

    void frame(useconds_t usec); 
}; 

#endif 
+1

このエラーはどの行ですか?また、colorは型ではなく名前空間であるため、そのまま使用することはできません。 –

+0

ようこそスタックオーバーフロー。 [The Tour](http://stackoverflow.com/tour)を読み、[ヘルプセンター](http://stackoverflow.com/help/asking)の資料を参考にしてください。ここに聞いてください。 –

+0

エラーは、clr名前空間内の行にあり、両方のファイルに3つの関数があります。そして、ああ、私は色を定義するためにenumデータ型を使用すると仮定していたので、名前空間を作ることを前提としていました。私は実際にenumメソッドを使うべきだと思っていますか? –

答えて

0

あなたの名前空間と変数の定義の使用と少し矛盾しているしています。次のことを試してみてください。

ヘッダー:

#ifndef COLOR_H 
#define COLOR_H 
#include <string> 
#include <iostream> 
#include <unistd.h> 

namespace color { 
    typedef const std::string colour; 

    colour black = "\033[0;30m"; 
    colour red = "\033[0;31m"; 
    colour green = "\033[0;32m"; 
    colour yellow = "\033[0;33m"; 
    colour blue = "\033[0;34m"; 
    colour magenta = "\033[0;35m"; 
    colour cyan = "\033[0;36m"; 
    colour white = "\033[0;37m"; 
    colour reset = "\033[0;39m"; 
}; 

namespace clr{ 
    void set(color::colour c); 
    void print(color::colour c, std::string s);  
    void frame(useconds_t usec); 
}; 

と.cppファイルのために:私は変化のように、いくつか作ってみましたけれども

namespace clr{ 
    void set(color::colour c){ std::cout << c; } 
    void print(color::colour c,std::string s){ /*do something*/; } 
    void frame(useconds_t usec){ /* do something*/; } 
}; 

これを書いて、よりエレガントな方法がありますが、できるだけコードに(たとえば、生産コードでは、色と色の両方を使用しないでください - 私の弱い心にはあまりにも混乱します)。しかし、これは私のシステム(コンパイルと実行)で動作するようです。

関連する問題