应该在c头文件中初始化const静态变量吗?

前端之家收集整理的这篇文章主要介绍了应该在c头文件中初始化const静态变量吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
my_test.h
#ifndef MY_TEST  
#define MY_TEST

struct obj {
  int x;
  int y;
};

class A {
private:
  const static int a=100;
  const static obj b;
};

const obj A::b={1,2};

#endif

使用此头文件编译cpp时,会出现错误’A :: b’的多重定义.

>为什么我已经使用了守卫宏呢?
>为什么A :: a不会产生错误? (我不能在A类中编写代码const static obj b = {1,2})

解决方法

why is this when I have been using guard macro already?

标题保护仅防止在同一个translation unit中多次包含头文件内容而不是多个翻译单元.

why is A::a does not have the error message (I can’t write code const static obj b={1,2} in class A)

编译器允许In-class initialization作为const文字类型的静态数据成员的特例.你的例子是In-class初始化.

const A :: b在每个翻译单元中定义相同的符号名称,其中包含标题,因此打破了one definition rule.

您需要将定义移动到一个且只有一个源cpp文件,以便仅定义一次.

猜你在找的C&C++相关文章