c++中两个头文件定义同名类的解决办法

今天考虑了一个问题,如果两个头文件比如time.h times.h里面都定义了一个time的类,要怎么解决?vs编译器只对cpp文件进行编译,在编译阶段,这两个头文件的实现文件都不会出错,如果不在主函数中用到time这个类,程序也不会有问题。但是如果用到,那就是disaster!!!,如果你不得不在两个头文件中定义同名类,下面是我自己思考出来的最简单的解决方式---》》用不同的作用域包含

#ifndef TIME_H
#define TIME_H
namespace time1
{
    class Time
    {
    public:
        Time(int hour, int minute, int second);
        Time();
        void tick();
        void show();
    private:
        int hour;
        int minute;
        int second;
    };
}

#endif
#include "Time.h"
#include <iostream>
#include <iomanip>

using namespace std;
time1::Time::Time(int hour, int minute, int second)   //必须第一个是作用域
{
    this->minute = minute;
    this->hour = hour;
    this->second = second;
}

time1::Time::Time()
{
    this->minute = 0;
    this->hour = 0;
    this->second = 0;
}

void time1::Time::tick()
{
    ++second;
}

void time1::Time::show()
{
    cout << setw(2) << setfill(‘0‘) << hour << "时" << setw(2) << minute << "分" << setw(2) << second << "秒" << endl;
}
#ifndef TIMES_H
#define TIMES_H
namespace time2
{
    class Time
    {
    public:
    protected:
    private:
    };
}

#endif

这里没写我的times.h的cpp文件为空,实现与否都一个样

主函数,这样可以顺利运行处结果,如果不用作用域包含,则会出现重复定义的后果

#include "Times.h"
#include "Time.h"
int main()
{
    time1::Time  t2(16,44,10);
    time1::Time  t1;
    t1.show();
    t1.tick();
    t1.show();
    t2.show();
    return 0;
}

c++中两个头文件定义同名类的解决办法,布布扣,bubuko.com

时间: 2024-10-24 11:06:20

c++中两个头文件定义同名类的解决办法的相关文章

Spring MVC普通类或工具类中调用service报空空指针的解决办法(调用service报java.lang.NullPointerException)

当我们在非Controller类中应用service的方法是会报空指针,如图: 这是因为Spring MVC普通类或工具类中调用service报空null的解决办法(调用service报java.lang.NullPointerException) 按上述步骤解决完自己的工具类后,你会发现项目运行后仍然报空指针此时你需要在applicationContext.xml 配置文件中添加一行配置文件 如图: 对自己工具类所在的包进行注解扫描,使Spring能够识别自己上面所配置的注解 原文地址:htt

使用asp.net MVC4中的Bundle遇到的问题及解决办法分享

本文转自http://www.jb51.net/article/47264.htm 这篇文章主要介绍了使用asp.net MVC4中的Bundle遇到的问题及解决办法,需要的朋友可以参考下 背景    之前有过使用MVC3的经验,也建过MVC4的基本样例看过,知道有bundle这么一个方法. 近日想建个网站使用MVC4,但是我觉得在基本样例上改不好,有太多无用的东西,所以就建了一个空白的MVC的程序,然后自己写需要的东西, 将程序的目标框架从4.5降到了4.0(我使用的是VS2013),问题就来

http中 get方法 传送中文参数乱码解决办法

http传送参数有两种方法:get 和post  当时使用get方法传递中文参数是会有乱码现象 解决办法: 1.在jsp压面url后面的参数使用 encodeURI:"&zxbghy="+ encodeURI(zxbghy) 2.在后台java获取参数时使用字节数组:temphgdmhy = new String(hgdmhy.getBytes("ISO-8859-1"), "UTF-8");  案例,用get方法传递两个中文参数:zxb

实战中总结出来的CSS常见问题及解决办法

一.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值. 二.同一个的class选择符可以在一个文档中重复出现,而id选择符却只能出现一次. 对一个标签同时使用class和id进行CSS定义,如果定义有重复,id选择符做的定义有效,是因为id的权重要比class大. 三.一个兼容性调整(IE和Mozilla)的笨办法: 初学可能会碰到这样一个情况:同样一个标签的属性在IE设置成A显示是正常的,而在Mozilla里必须要设成B才能正常显示,或者两个倒过来. 临时解

web前端_表格table布局,同一列两个&lt;td&gt;之间有间隙解决办法。

同学接了个很简单的网站.结果在布局的时候发现网页头部和网页主体之间差不多有1px的间隙.怎么也去除不了,帮忙看了看,隋记录下来,是这样的,网页头部和主体分别在两个<td>中(使用table布局),贴上简单demo: 效果如下,间隙消失了,最重要的是红色矩形圈起来的那句. 如果去掉红色矩形圈起来的部分,效果如下: web前端_表格table布局,同一列两个<td>之间有间隙解决办法.

[转]iOS Safari 中click点击事件失效的解决办法

iOS Safari 中click点击事件失效的解决办法 问题起因: 在微信公众号开发(微站)过程中用jquery的live方法绑定的click事件点击无效(不能执行) 问题描述 当使用委托给一个元素添加click事件时,如果事件是委托到 document 或 body 上,并且委托的元素是默认不可点击的(如 div, span 等),此时 click 事件会失效. 解决办法 解决办法有 4 种可供选择: ?将 click 事件直接绑定到目标?元素(??即 .target)上 将目标?元素换成 

Linux中error while loading shared libraries错误解决办法

Linux中error while loading shared libraries错误解决办法 默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,通常通过源码包进行安装时,如果不指定--prefix,会将库安装在/usr/local/lib目录下:当运行程序需要链接动态库时,提示找不到相关的.so库,会报错.也就是说,/usr/local/lib目录不在系统默认的库搜索目录中,需要将目录加进去. 1.首先打开 /etc/ld.so.conf 文件 2.加入动态库文件所在

java.sql.SQLException: 索引中丢失 IN 或 OUT 参数:: 1解决办法

java.sql.SQLException: 索引中丢失  IN 或 OUT 参数:: 1 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:162) at oracle.jdbc.driver.OraclePreparedStatement.pr

未能从程序集“System.ServiceModel, Version=3.0.0.0”中加载类型“System.ServiceModel.Activation.HttpModule” 的解决办法

错误消息: 未能从程序集“System.ServiceModel, Version=3.0.0.0”中加载类型“System.ServiceModel.Activation.HttpModule” 的解决办法 解决办法: 1, 若要解决该问题,请在 Visual Studio 2010 命令提示符下运行下面的命令行: aspnet_regiis.exe -i -enable 如果出现以下错误的时候我们就用方法2.. PM> aspnet_regiis.exe -i -enable无法将“aspn