【发布时间】:2018-11-23 05:41:07
【问题描述】:
我有一个类,带有模板构造函数:
class x
{
public:
template<std::size_t N>
x(int matrix[N][N])
{
A<N> ob(matrix);
}
};
在主函数中:
int main()
{
size_t s;
cin >> s;
int m[s][s];
x ob(m); // error
}
错误是:
错误:没有匹配函数调用'
x::x(int [s][s])'|
我想创建一个数组,其大小由用户指定并传递给x::x(),它使用它来创建模板类对象。 A 定义为:
template<size_t N>
class A
{
...
};
对此的任何解决方案,我希望在运行时输入N 并将其作为模板参数传递。其实我想直接传给A,但是报错:non-const template argument,所以我想在另一个类中创建A,但是错误也在那里。
我正在使用代码块 16.01。
【问题讨论】:
-
size_t s; cin >> s; int m[s][s];不是 C++ 标准。数组的大小必须是编译时已知的值。 -
@max66 那么编译器如何允许它
-
template<std::size_t N> x(int matrix[N][N])调整为template<std::size_t N> x(int (*matrix)[N]) -
如果您不要求严格遵守,一些编译器会接受非标准代码。如果使用 clang++ 或 g++ 编译,请尝试添加
-ansi -pedantic。 -
@max66 你知道任何解决方案吗?我如何在运行时传递输入
N然后使用它。
标签: class c++11 templates size-t template-classes