所以我需要两个文件名为" colors.h"和一个名为" colors.cpp"的源文件。在命名空间clr里面的头文件中,我试图对3个函数进行原型设计,然后我想在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
答案 0 :(得分: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*/; }
};
有更优雅的方式来写这个,虽然我试图尽可能少地对你的代码进行更改(例如,在生产代码中,我绝不会同时使用颜色和颜色 - 对我虚弱的头脑来说太混乱了) 。然而,这似乎适用于我的系统(编译和运行)。