模板递归错误“需要简化”

时间:2019-05-24 13:19:05

标签: c++ templates

kmeans.h
#include <iostream>
#include <vector>

template <class T,int DIM>
class array_dim
{
private:
    T arr[DIM];
public:
    array_dim() {};
    explicit array_dim(const T &v);
    virtual T & operator [](int i);
    virtual T operator [](int i)const;
};

template<class T,int DIM>
array_dim<T, DIM>::array_dim(const T & v)
{
    for (int i = 0; i < DIM; i++)
    {
        arr[i] = v;
    }
};

template <class T,int DIM>
T & array_dim<T, DIM>::operator[](int i)
{
    if (i < 0 || i >= DIM)
    {
        std::cerr << "Error in array dim out of range\n";
        std::exit(EXIT_FAILURE);
    }
    return arr[i];
};

template<class T,int DIM>
T array_dim<T, DIM>::operator[](int i) const
{
    if (i < 0 || i >= DIM)
    {
        std::cerr << "Error in array limits:\n";
        std::exit(EXIT_FAILURE);
    }
    return arr[i];
}

template<class items,int dim1,int dim2,int n_cluster>
array_dim<int, dim2> Kmeans (array_dim<array_dim<items, dim1>,dim2> values, array_dim<array_dim<items,dim1>,n_cluster> centers,const items &T)
{
    using std::vector;
    array_dim<int, dim2> flags_of_points;
    array_dim<vector<array_dim<items, dim1>>, n_cluster> summations;
    return flags_of_points;

}

test.cpp
#include"kmeans.h"
int main()
{
    //initialization can be skipped
    array_dim<array_dim<double, 1>, 10> temp;
    srand(time(NULL));
    int i;
    for (i = 0; i < 3; i++)
    {
        temp[i][0] =(double) std::rand()/RAND_MAX*0.1;
    }
    for (i = 3; i < 10; i++)
    {
        temp[i][0] = (double) (std::rand()/ RAND_MAX * 0.1+0.7);
    }


    array_dim<array_dim<double, 1>, 2> centers;
    centers[0][0] = 0.05;
    centers[1][0] = 0.7;

    array_dim<int, 10> allflags;

    //using the function
    allflags = Kmeans (temp, centers, 0.0);


    return 0;
}

使用vs2017编译上述程序时,它不会通过。该错误表明代码array_dim<std::vector<array_dim<double, 2>>, 3> summations需要简化。 完整的错误消息:

  

致命错误C1001:编译器发生内部错误。   编译器文件“ msc1.cpp”,行1518要解决此问题,请尝试   在上面列出的位置附近简化或更改程序

我想知道是否有问题像上述那样递归实现模板?我将一个复杂的模板函数定义为Kmeans。实际上是该函数中的错误发生了

0 个答案:

没有答案
相关问题