作者johnjohnlin (LYSin8)
看板EE_DSnP
标题[问题] #HW3 编译时 link error
时间Mon Nov 8 20:29:19 2010
请问一下
我在 make 的时候
~$ make clean
(输出略)
~$ make
(略)
> building modCalc...
../../lib/libcalc.a(calcCmd.o): In function `ModNum::setModulus(int)':
calcCmd.cpp:(.text._ZN6ModNum10setModulusEi[ModNum::setModulus(int)]+0x7):
undefined reference to `ModNum::_modulus'
(略)
static void setModulus(int m) { _modulus = m; }
可是 ModNum 的 private member 里面有定义 _modulus 耶...
getModulus 也有一样的 link error
大约 google 一下,找到了类似的解释
http://stackoverflow.com/questions/2916759/
undefined-reference-to-static-member-variable
http://stackoverflow.com/questions/272900/
c-undefined-reference-to-static-class-member
可是不能改 data member,有什麽解决的方法?
/* 我在 calcModNum.h 的 global scope 加上 static int _modulus
* 然後再把 _modulus 加上 ::,这样可以把错误压制掉
* 可是这应该不是合理的解决方法
* 所以 PO 上来问一下...... */
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.243.89
※ 编辑: johnjohnlin 来自: 140.112.243.89 (11/08 20:29)
1F:→ johnjohnlin:还是说因为某些行被教授拿掉了,所以编译不会过 11/08 20:42
2F:→ johnjohnlin:要我们自己补上去? 11/08 20:42
3F:推 cktigeryang:要在.cpp档里面initialize他 11/08 20:49
4F:→ tomap41017:cpp才init喔!!档案有写 11/08 21:17
5F:推 ggegge:要在cpp global scope initialize int ModNum::_modulus; 11/08 23:32
6F:推 TommyKSHS:因为那个变数是 static member 11/08 23:54
7F:推 ric2k1:感谢楼上各位的回答,希望大家都注意到这个问题! 11/09 13:00