通过函数模板传递多维数组

时间:2015-12-27 07:23:01

标签: c++ arrays templates c++11 multidimensional-array

^请解释我的问题是如何与您链接的问题重复。

我正在尝试将多维数组传递给函数。该数组看起来像这样:

const char CHECKERS_ANIMATION[][8] = {
    {0xcc,0xcc,0x33,0x33,0xcc,0xcc,0x33,0x33},
    {0x33,0x33,0xcc,0xcc,0x33,0x33,0xcc,0xcc}
};

我有很多这些数组。它们都是Nx8,其中N在编译时是已知的。

在我的类头文件中,我有一个公共方法定义如下:

template <typename T, size_t frames, size_t rows> void playAnimation(int device_number, const T (&animation)[frames][rows], int iterations = 1, int speed = 50000);

此方法的实施:

template <typename T, size_t frames, size_t rows> void LEDMatrix::playAnimation(int device_number, const T (&animation)[frames][rows], int iterations, int speed)
{
cout << "r: " << rows << ", f: " << frames << endl;
for (int i = 0; i < iterations; i++) {
    for (int j = 0; j < frames; j++) {
        for (int k = 0; k < rows; k++) {
            putRow(device_number, k, animation[j][k]);
        }

        usleep(speed);
        clearDisplay(device_number);
    }
}
}

该方法如下调用:

obj->playAnimation(0, CHECKERS_ANIMATION);

我选择了这种方法,因为我需要知道方法中数组的NxM大小。

当我编译它时,我收到以下错误:

/tmp/ccMH2CBE.o: In function `main':
test.cpp:(.text.startup+0x44): undefined reference to `void LEDMatrix::playAnimation<char, 13u, 8u>(int, char const (&) [13u][8u], int, int)'
collect2: ld returned 1 exit status

我该如何解决这个问题?我已经杀了两天试图解决我认为是一个简单的问题。

谢谢。

0 个答案:

没有答案