在我的文件里有这class NFDuration, NFDuration.h里是这样的:

// A Duration represents the elapsed time between two instants
// as an int64 nanosecond count. The representation limits the
// largest representable duration to approximately 290 years.
class NFDuration
{
public:
static const int64_t kNanosecond; // = 1LL
static const int64_t kMicrosecond;// = 1000
static const int64_t kMillisecond;// = 1000 * kMicrosecond
static const int64_t kSecond; // = 1000 * kMillisecond
static const int64_t kMinute; // = 60 * kSecond
static const int64_t kHour; // = 60 * kMinute
public:
NFDuration();
explicit NFDuration(const struct timeval& t);
explicit NFDuration(int64_t nanoseconds);
explicit NFDuration(int nanoseconds);
explicit NFDuration(double seconds); // Nanoseconds returns the duration as an integer nanosecond count.
int64_t Nanoseconds() const; // These methods return double because the dominant
// use case is for printing a floating point number like 1.5s, and
// a truncation to integer would make them not useful in those cases. // Seconds returns the duration as a floating point number of seconds.
double Seconds() const; double Milliseconds() const;
double Microseconds() const;
double Minutes() const;
double Hours() const; struct timeval TimeVal() const;
void To(struct timeval* t) const; bool IsZero() const;
bool operator<(const NFDuration& rhs) const;
bool operator<=(const NFDuration& rhs) const;
bool operator>(const NFDuration& rhs) const;
bool operator>=(const NFDuration& rhs) const;
bool operator==(const NFDuration& rhs) const; NFDuration operator+=(const NFDuration& rhs);
NFDuration operator-=(const NFDuration& rhs);
NFDuration operator*=(int ns);
NFDuration operator/=(int ns); private:
int64_t ns_; // nanoseconds
}; #include "NFDuration.in.h"

在NFDuration.in.h里

#pragma once

inline NFDuration::NFDuration()
: ns_()
{
} inline NFDuration::NFDuration(const struct timeval& t)
: ns_(t.tv_sec * kSecond + t.tv_usec * kMicrosecond)
{
} inline NFDuration::NFDuration(int64_t nanoseconds)
: ns_(nanoseconds)
{
} inline NFDuration::NFDuration(int nanoseconds)
: ns_(nanoseconds)
{
} inline NFDuration::NFDuration(double seconds)
: ns_((int64_t)(seconds * kSecond))
{
} inline int64_t NFDuration::Nanoseconds() const
{
return ns_;
} inline double NFDuration::Seconds() const
{
return double(ns_) / kSecond;
} inline double NFDuration::Milliseconds() const
{
return double(ns_) / kMillisecond;
} inline double NFDuration::Microseconds() const
{
return double(ns_) / kMicrosecond;
} inline double NFDuration::Minutes() const
{
return double(ns_) / kMinute;
} inline double NFDuration::Hours() const
{
return double(ns_) / kHour;
} inline bool NFDuration::IsZero() const
{
return ns_ == ;
} inline struct timeval NFDuration::TimeVal() const
{
struct timeval t;
To(&t);
return t;
} inline void NFDuration::To(struct timeval* t) const
{
t->tv_sec = (long)(ns_ / kSecond);
t->tv_usec = (long)(ns_ % kSecond) / (long)kMicrosecond;
} inline bool NFDuration::operator<(const NFDuration& rhs) const
{
return ns_ < rhs.ns_;
} inline bool NFDuration::operator<=(const NFDuration& rhs) const
{
return ns_ <= rhs.ns_;
} inline bool NFDuration::operator>(const NFDuration& rhs) const
{
return ns_ > rhs.ns_;
} inline bool NFDuration::operator>=(const NFDuration& rhs) const
{
return ns_ >= rhs.ns_;
} inline bool NFDuration::operator==(const NFDuration& rhs) const
{
return ns_ == rhs.ns_;
} inline NFDuration NFDuration::operator+=(const NFDuration& rhs)
{
ns_ += rhs.ns_;
return *this;
} inline NFDuration NFDuration::operator-=(const NFDuration& rhs)
{
ns_ -= rhs.ns_;
return *this;
} inline NFDuration NFDuration::operator*=(int n)
{
ns_ *= n;
return *this;
} inline NFDuration NFDuration::operator/=(int n)
{
ns_ /= n;
return *this;
}

在NFDuration.cpp里是这样初始化的:

#include "NFDuration.h"

const int64_t NFDuration::kNanosecond = 1LL;
const int64_t NFDuration::kMicrosecond = * kNanosecond;
const int64_t NFDuration::kMillisecond = * kMicrosecond;
const int64_t NFDuration::kSecond = * kMillisecond;
const int64_t NFDuration::kMinute = * kSecond;
const int64_t NFDuration::kHour = * kMinute;

3个文件这样写,在windows,linux系统上使用后,编译都没有问题,但是我觉得NFDuration.in.h这个文件麻烦,就把NFDuration.in.h里的东西移到了NFDuration.h里

class NFDuration
{
public:
static const int64_t kNanosecond; // = 1LL
static const int64_t kMicrosecond;// = 1000
static const int64_t kMillisecond;// = 1000 * kMicrosecond
static const int64_t kSecond; // = 1000 * kMillisecond
static const int64_t kMinute; // = 60 * kSecond
static const int64_t kHour; // = 60 * kMinute
public:
NFDuration();
explicit NFDuration(const struct timeval& t);
explicit NFDuration(int64_t nanoseconds);
explicit NFDuration(int nanoseconds);
explicit NFDuration(double seconds); // Nanoseconds returns the duration as an integer nanosecond count.
int64_t Nanoseconds() const; // These methods return double because the dominant
// use case is for printing a floating point number like 1.5s, and
// a truncation to integer would make them not useful in those cases. // Seconds returns the duration as a floating point number of seconds.
double Seconds() const; double Milliseconds() const;
double Microseconds() const;
double Minutes() const;
double Hours() const; struct timeval TimeVal() const;
void To(struct timeval* t) const; bool IsZero() const;
bool operator<(const NFDuration& rhs) const;
bool operator<=(const NFDuration& rhs) const;
bool operator>(const NFDuration& rhs) const;
bool operator>=(const NFDuration& rhs) const;
bool operator==(const NFDuration& rhs) const; NFDuration operator+=(const NFDuration& rhs);
NFDuration operator-=(const NFDuration& rhs);
NFDuration operator*=(int ns);
NFDuration operator/=(int ns); private:
int64_t ns_; // nanoseconds
}; inline NFDuration::NFDuration()
: ns_()
{
} inline NFDuration::NFDuration(const struct timeval& t)
: ns_(t.tv_sec * kSecond + t.tv_usec * kMicrosecond)
{
} inline NFDuration::NFDuration(int64_t nanoseconds)
: ns_(nanoseconds)
{
} inline NFDuration::NFDuration(int nanoseconds)
: ns_(nanoseconds)
{
} inline NFDuration::NFDuration(double seconds)
: ns_((int64_t)(seconds * kSecond))
{
} inline int64_t NFDuration::Nanoseconds() const
{
return ns_;
} inline double NFDuration::Seconds() const
{
return double(ns_) / kSecond;
} inline double NFDuration::Milliseconds() const
{
return double(ns_) / kMillisecond;
} inline double NFDuration::Microseconds() const
{
return double(ns_) / kMicrosecond;
} inline double NFDuration::Minutes() const
{
return double(ns_) / kMinute;
} inline double NFDuration::Hours() const
{
return double(ns_) / kHour;
} inline bool NFDuration::IsZero() const
{
return ns_ == ;
} inline struct timeval NFDuration::TimeVal() const
{
struct timeval t;
To(&t);
return t;
} inline void NFDuration::To(struct timeval* t) const
{
t->tv_sec = (long)(ns_ / kSecond);
t->tv_usec = (long)(ns_ % kSecond) / (long)kMicrosecond;
} inline bool NFDuration::operator<(const NFDuration& rhs) const
{
return ns_ < rhs.ns_;
} inline bool NFDuration::operator<=(const NFDuration& rhs) const
{
return ns_ <= rhs.ns_;
} inline bool NFDuration::operator>(const NFDuration& rhs) const
{
return ns_ > rhs.ns_;
} inline bool NFDuration::operator>=(const NFDuration& rhs) const
{
return ns_ >= rhs.ns_;
} inline bool NFDuration::operator==(const NFDuration& rhs) const
{
return ns_ == rhs.ns_;
} inline NFDuration NFDuration::operator+=(const NFDuration& rhs)
{
ns_ += rhs.ns_;
return *this;
} inline NFDuration NFDuration::operator-=(const NFDuration& rhs)
{
ns_ -= rhs.ns_;
return *this;
} inline NFDuration NFDuration::operator*=(int n)
{
ns_ *= n;
return *this;
} inline NFDuration NFDuration::operator/=(int n)
{
ns_ /= n;
return *this;
}

这个时候在wondows上使用后编译时没有问题的, 但是在Linux上老是报static const成员没有定义的错误,  于是我把初始化写的类里面, 把NFDuration.cpp里的东西删掉, NFDuration.h变成了这样

class NFDuration
{
public:
static const int64_t kNanosecond = 1LL;
static const int64_t kMicrosecond = ;
static const int64_t kMillisecond = * kMicrosecond;
static const int64_t kSecond = * kMillisecond;
static const int64_t kMinute = * kSecond;
static const int64_t kHour = * kMinute;
.........................
其余与上面一样

然后就发现,在Linux上是没有问题了,但是在windows上又报static const成员没有定义, 这是咋回事啊,网上搜索也没有找到答案,最后只好又恢复成文字刚开始3个文件的样子, 貌似只有这样才没有问题,两个系统都能编译,只是原因想不通

找了很久终于找到原因了,娘的啊。。。。。。。。。。。。。。。。。。。。。。。。

终于找到原因了,所有的问题都找错了,不管怎么样写其实都没有问题, 真正的问题是timeval这个数据结构的,没法支持跨平台,而linux系统的编译器老是误报, 没有吧问题真正的原因暴露出来,timeval我也不知道怎么做到快平台,最后只好加上libevent的头文件,

解决了这个问题。 本来想删掉这文章的,想想留住纪念吧!!

最新文章

  1. 【原】Masonry+UIScrollView的使用注意事项
  2. oracle查询某一个字段的数量总和
  3. JSON的简单例子
  4. 提高PHP开发质量的36个方法(精品)
  5. Extjs4.2纯前台导出Excel总结
  6. javascript构造函数+原形继承+作用域扩充
  7. Cookie的一些用法
  8. GitLab Development Kit 环境搭建
  9. meta标签整合
  10. 记录使用Redis和nginx 实现一个简单的负载均衡(FB)
  11. win7文件搜索技巧
  12. ads出现村田电容电感无法仿真的问题解决(`BJT1&#39; is an instance of an undefined model `BJTM1&#39;)
  13. Java并发编程之volatile关键字
  14. 转:C#线程系列讲座(1) BeginInvoke和EndInvoke方法
  15. 当图片加载失败时更换图片, Firefox onerror 报错
  16. Hive错误:Permission denied: user=anonymous, access=EXECUTE, inode=”/tmp”
  17. 浅谈getResource方法
  18. 账户控制器(AccountController)
  19. e804. 显示JProgressBar的完成百分率
  20. 第二百四十六节,Bootstrap弹出框和警告框插件

热门文章

  1. Redis(2)---数据持久化
  2. hibernate框架(1)---Hibernate增删改查
  3. Spring Boot - 获取所有的Bean信息
  4. java-vip介绍
  5. python字符串类型
  6. MySQL系列详解三:MySQL中各类日志详解-技术流ken
  7. spring-cloud-starter-gateway
  8. .Net Core 使用 System.Drawing.Common 部署到CentOS上遇到的问题
  9. php获取服务器信息常用方法(零碎知识记忆)
  10. 深入理解JAVA中的NIO