我有一个头文件SomeDefines.h,其中包括
#define U64 unsigned long long
#define U16 unsigned short
在Myclass.h中,我在顶部
#include SomeDefines.h
。在Myclass声明中,我有一个函数
bool someFunc(const std::vector<U64>& theVector);
和一个成员变量
tbb::atomic someNumber;
在Visual Studio 2012中进行编译时,出现错误
error: 'U64': undeclared identifier
error C2923: 'std::vector': 'U64' is not a valid template type argument for parameter '_Ty'
如果我将
U64
替换为unsigned long long
,错误就会消失bool someFunc(const std::vector<unsigned long long>& theVector);
我以为编译器会看到
#define U64 unsigned long long
并将U64
替换为unsigned long long
。为什么我收到
U64
而不是U16
的这些错误? 最佳答案
#define
不是创建新类型的好主意。首选typedef
或using
:
typedef unsigned long long U64;
// or:
using U64 = unsigned long long;
关于c++ - 'std::vector' : 'U64' is not a valid template type argument for parameter '_Ty' ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28485960/