zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    timer.Interval用法简介
    .net 未被引用的错误
    将Sql查询语句获取的数据插入到List列表里面
    .net 里面打不出来ConfigurationManager
    .net MVC框架里怎么写控件
    数据库里面几个字符类型的区别
    怎么在.net里面解析JSON文件?
    SqlCommand.ExecuteScalar()方法
    git学习笔记
    可变参数的lambda表达式
  • 原文地址:https://www.cnblogs.com/yican/p/3918320.html
Copyright © 2011-2022 走看看