未定义的引用,为什么

时间:2017-05-12 17:55:07

标签: c++ templates

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;
}                                                                                    

1 个答案:

答案 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