Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使计数器在不同的cpp文件中生成相同的值_C++_Templates - Fatal编程技术网

C++ 如何使计数器在不同的cpp文件中生成相同的值

C++ 如何使计数器在不同的cpp文件中生成相同的值,c++,templates,C++,Templates,我正在使用来定义我的类型。但是,如果我从main.cpp访问变量sval1,它会得到一个与从test.cpp访问变量不同的\uuuuuu计数器\uuuuu值 如何确保在所有.cpp文件中生成相同的\uuuuu计数器值 template <class TYPE, DWORD CRYPT_KEY> class SVar; struct t_teststruct { SVar<type, __COUNTER__> sval1; } 模板 SVar类; struct

我正在使用来定义我的类型。但是,如果我从main.cpp访问变量
sval1
,它会得到一个与从test.cpp访问变量不同的
\uuuuuu计数器\uuuuu

如何确保在所有.cpp文件中生成相同的
\uuuuu计数器值

template <class TYPE, DWORD CRYPT_KEY> 
class SVar;

struct t_teststruct
{
    SVar<type, __COUNTER__> sval1;
}
模板
SVar类;
struct t_teststruct
{
SVar-sval1;
}

最佳做法是在需要访问该变量的每个源文件(.cpp)中包含一个头文件(.h)。头文件应将计数器声明为
extern

柜台h: 单个源文件应包含变量的实际声明(以及任何所需的初始化)

counter.cpp: main.cpp: test.cpp:
这将使我使用它作为一个全局变量。我需要它成为一个预处理器“计数器”哦,如果你在需要编译时知道它,你可以将它定义为一个标志:
g++-D_ucounter\uuu=5…
@AustinMullins他说的是。在翻译单元中,每次使用时,它都会自动递增。这整件事有点X-Y问题的味道。你不能在模板参数中使用非常量变量。你想做什么?这看起来很经典。为什么不用0替换它呢?
#ifndef COUNTER_H
#define COUNTER_H
  extern int __COUNTER__;
#endif
#include "counter.h"
int __COUNTER__ = 0;
#include "counter.h"

int main() {
    // etc.
    return 0;
}
#include "counter.h"

struct t_teststruct
{
    SVar<type, __COUNTER__> sval1;
}

// etc.
g++ -o test.exe main.o test.o counter.o