g ++:对'A :: sc'的未定义引用,为什么?但声明a = sc是可以的。 因为模板?
#include <iostream>
template<typename T>
inline const T &min(const T &left, const T &right)
{
return (left < right ? left : right);
}
class A
{
public:
static const size_t sc = 0;
A()
{
size_t tmp = 0;
size_t a = sc;
size_t b = min(sc, tmp);
}
};
int main()
{
A a;
return 0;
}
答案 0 :(得分:8)
当你有
时static const size_t sc = 0;
作为班级成员,它仍然是一个宣言。如果您只在程序中使用其值,则无需定义它。但是,如果您通过引用使用它,则必须使用以下命令对其进行定义:
const size_t A::sc;
该行
size_t a = sc;
按值使用sc
,但行
size_t b = min(sc, tmp);
通过引用使用sc
。因此,需要定义sc
。