今天考虑了一个问题,如果两个头文件比如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