当我尝试编译由CUDA的cudafe ++工具生成的以下(损坏)代码时,Visual Studio会抛出错误C2244。这是正确的行为吗?海湾合作委员会似乎并不关心签名不匹配。
代码:
template<int Size>
class MyClass {
public:
MyClass(const int data[Size]);
};
template<int Size>
MyClass<Size> ::MyClass(const int data[]) {}
void func(MyClass<4> input) {}
输出:
test2.cpp(9) : error C2244: 'MyClass<Size>::MyClass' : unable to match function definition to an existing declaration
test2.cpp(5) : see declaration of 'MyClass<Size>::MyClass'
definition
'MyClass<Size>::MyClass(const int [])'
existing declarations
'MyClass<Size>::MyClass(const int [Size])'
答案 0 :(得分:8)
我很确定这不正确。
int foo(const int []);
int foo(const int [4]);
int foo(const int *);
应该都声明相同的功能。话虽如此,你可能想要的是:
template<int Size>
class MyClass {
public:
MyClass(const int (&data)[Size]);
};
template<int Size>
MyClass<Size> ::MyClass(const int (&data)[Size]) {}
将仅接受正确大小的数组。