当前位置:  开发笔记 > 编程语言 > 正文

静态类成员上未解析的外部符号

如何解决《静态类成员上未解析的外部符号》经验,为你挑选了2个好方法。

非常简单地说:

我有一个主要由静态公共成员组成的类,所以我可以将类似的函数组合在一起,但仍然需要从其他类/函数中调用它们.

无论如何,我在我的类公共范围中定义了两个静态unsigned char变量,当我尝试在同一个类的构造函数中修改这些值时,我在编译时遇到"未解析的外部符号"错误.

class test 
{
public:
    static unsigned char X;
    static unsigned char Y;

    ...

    test();
};

test::test() 
{
    X = 1;
    Y = 2;
}

我是C++的新手,所以对我很轻松.为什么我不能这样做?



1> Colin Jensen..:

您忘记添加定义以匹配您的X和Y声明

unsigned char test::X;
unsigned char test::Y;

某处.您可能还想初始化静态成员

unsigned char test::X = 4;

再次,你在定义中(通常在CXX文件中)不在声明中(通常在.H文件中)


如果您正在编写仅限标头的库,则可以使用此技术来避免cpp文件:http://stackoverflow.com/questions/11709859/how-to-have-static-data-members-in-a-header-only -图书馆

2> sergtk..:

类声明中的静态数据成员声明不是它们的定义.要定义它们,您应该在.CPP文件中执行此操作以避免重复的符号.

您可以声明和定义的唯一数据是整数静态常量.(值enums也可以用作常数值)

您可能希望将代码重写为:

class test {
public:
  const static unsigned char X = 1;
  const static unsigned char Y = 2;
  ...
  test();
};

test::test() {
}

如果你想有修改你静态变量的能力(换句话说,当它是不恰当的将它们声明为const),也可以分开你的代码之间.H,并.CPP以下列方式:

.H :

class test {
public:

  static unsigned char X;
  static unsigned char Y;

  ...

  test();
};

.CPP:

unsigned char test::X = 1;
unsigned char test::Y = 2;

test::test()
{
  // constructor is empty.
  // We don't initialize static data member here, 
  // because static data initialization will happen on every constructor call.
}

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有