2017-02-11 63 views
-2

所以我有兩個文件名爲「colors.h」的頭文件和一個名爲「colors.cpp」的源文件。在命名空間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

該錯誤是哪一行?顏色也是一個命名空間,而不是一個類型,所以它不能用於這種類型。 –

+0

歡迎來到堆棧溢出。請花些時間閱讀[The Tour](http://stackoverflow.com/tour),並參閱[幫助中心](http://stackoverflow.com/help/asking)中的資料,瞭解您可以在這裏問。 –

+0

錯誤位於clr命名空間內的兩行文件中的所有三個函數中。嗯,好吧,我想使用枚舉數據類型來定義顏色,我假設這意味着要創建一個命名空間。我猜我應該實際使用枚舉方法? –

回答

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*/; } 
}; 

有寫這個的更優雅的方式,雖然我試圖讓儘可能少的變化儘可能將代碼添加到您的代碼中(例如,在生產代碼中,我絕不會同時使用顏色和顏色 - 對於我微弱的頭腦來說太混亂了)。但是,這似乎在我的系統上工作(編譯和運行)。