免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1994 | 回复: 3
打印 上一主题 下一主题

[C++] 求帮助,c++连接的一个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-09-16 11:02 |只看该作者 |倒序浏览
我写了一个Profiler类
  1. namespace TinyCompiler{

  2.         namespace Profiler{
  3.                 typedef std::chrono::steady_clock SteadyClock;
  4.                 typedef SteadyClock::time_point TimePoint;
  5.                 //static std::chrono::steady_clock::time_point startTime;(1)
  6.                 //static std::chrono::steady_clock::time_point finishTime;(2)
  7.                 class ProfilerInstance{
  8.                 private:
  9.                        
  10.                         static TimePoint startTime;(3)
  11.                         static TimePoint finishTime;(4)
  12.                 public:
  13.                         static void start();
  14.                         static void finish();
  15.                         static void dumpDuringTime(std::ostream& os = std::cout);
  16.                 };
  17.         }
  18. }
复制代码
  1. void ProfilerInstance::start(){
  2.                         startTime = SteadyClock::now();
  3.                 }
  4.                 void ProfilerInstance::finish(){
  5.                         finishTime = SteadyClock::now();
  6.                 }
复制代码
出现了连接错误:
错误        1        error LNK2001: 无法解析的外部符号 "private: static class std::chrono::time_point<struct std::chrono::system_clock,class std::chrono::duration<__int64,struct std::ratio<1,10000000> > > TinyCompiler:rofiler:rofilerInstance::startTime" (?startTime@ProfilerInstance@Profiler@TinyCompiler@@0V?$time_point@Usystem_clock@chrono@std@@V?$duration@_JU?$ratio@$00$0JIJGIA@@std@@@23@@chrono@std@@A)        C:\Users\zxh\Desktop\TinyCompiler\TinyCompiler\Profiler.obj        TinyCompiler

但是我把(3)(4)注释掉换成(1)(2)程序就能连接成功,求解这是为什么,想了好久想不明白啊

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
2 [报告]
发表于 2014-09-16 12:30 |只看该作者
因为佻没有using响马

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
3 [报告]
发表于 2014-09-16 13:02 |只看该作者
本帖最后由 w_anthony 于 2014-09-16 16:10 编辑

(1)(2)在类外面,会被认作定义,而(3)(4)在类里面会被认作声明。
而光有声明是不行得的,还必须定义。
另外(1)(2)这样写,如果是写在.h里面,然后这个.h被不同.cpp包含,会报重定义错误的。

-----------------------------------
我说错了一部分,(1)(2)这个是static的,即使被不同的cpp包含也不会报重定义错误,只是不同的cpp访问的实际上是不同的实例而已。

论坛徽章:
0
4 [报告]
发表于 2014-09-16 15:09 |只看该作者
回复 3# w_anthony
对!我竟然只在类里面声明而忘记定义了,煞笔了。谢谢啊


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP