标题和cpp中的预期主表达式

时间:2017-02-11 15:30:52

标签: c++

所以我需要两个文件名为" 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

1 个答案:

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

有更优雅的方式来写这个,虽然我试图尽可能少地对你的代码进行更改(例如,在生产代码中,我绝不会同时使用颜色和颜色 - 对我虚弱的头脑来说太混乱了) 。然而,这似乎适用于我的系统(编译和运行)。