【问题标题】:C++ variable redefinitionC++ 变量重定义
【发布时间】:2010-10-01 04:59:54
【问题描述】:

我有一个文件:

变量包含.h

#ifndef _variableinclude_h_
#define _variableinclude_h_

AClass* variable1;
int* variable2;

#endif

但我将此文件包含在另外两个不同的文件中:

- atest1.h

- atest2.h

问题如下:变量重定义。

如何避免这种情况???

【问题讨论】:

  • 您遇到链接器错误或编译器错误?
  • 请注意,包含保护非法使用保留前缀 (_v)。此外,按照惯例,宏是大写的。
  • @MSalters:为什么要保留这个?我认为不应该只使用双下划线。
  • @ur:双下划线在标记中的任何地方都保留,而不仅仅是作为前缀。并且它们被保留以供实现未指定使用。例如。只要您#include <variableinclude.h>,编译器就可以在内部定义_variableinclude_h_
  • 保留任何包含双下划线的标识符。任何以下划线开头后跟大写字母的内容都是保留的。如果在命名空间范围内声明以下划线开头的任何其他内容(您的包含保护是)

标签: c++ variables redefinition


【解决方案1】:

EDIT2:

欢迎来到ODR

编辑 1:

将变量放在头文件中。

extern AClass* variable1;   // assuming AClass is declared at this point.
extern int* variable2;

在任何 cpp 文件中定义一次且仅一次,例如在命名空间范围内的 main.cpp 中。

AClass* variable1 = NULL;   // assuming AClass is declared at this point.
int* variable2 = NULL;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 2019-04-07
    • 2019-05-27
    • 2012-05-30
    • 2015-06-30
    相关资源
    最近更新 更多