静态模板constexpr错误

时间:2013-11-19 12:15:22

标签: c++ templates typedef constexpr

大家好我有以下课程:“Verification.h”


#ifndef VERIFICATION_H
#define VERIFICATION_H

#include <vector>
#include <string>
#include <dlib/svm.h>
using namespace dlib;
using namespace std;


class Verification
{
    public:
        Verification(std::string, std::vector<string>,const int);
        virtual ~Verification();
        void Verify();
    private:
        std::vector<std::string> groundTruth;
        std::string path;
        const int rows;

};

#endif // VERIFICATION_H

Verification.cpp

#include "Verification.h"

Verification::Verification(string p, std::vector<string> gt,const int r):path(p),groundTruth(gt),rows(r)
{

}

Verification::~Verification()
{
    //dtor
}

void Verification::Verify()
{
    //Load ground truth and build matrix
    typedef matrix<double, rows, 9> sample_type;
    typedef radial_basis_kernel<sample_type> kernel_type;


}

问题:我正在尝试初始化:

 typedef matrix<double, 9,1> sample_type;

但我得到以下错误:

  1. Verification.cpp | 16 | error:'this'不是常量表达式|
  2. Verification.cpp | 16 |注意:在'long int'|
  3. 类型的模板参数中
  4. Verification.cpp | 16 |错误:';'之前的声明中的类型无效令牌|
  5. 我该如何解决?

    谢谢。


    基于MM答案的编辑:

      //Load ground truth and build matrix
        typedef matrix<double> data;
        data data_type;
        data_type.set_size(9,1);
    

2 个答案:

答案 0 :(得分:4)

变量rows应该在编译时知道。

如果您想使用常数而不是数字,则可以将其设为static constexpr,例如:

static constexpr int rows = 1;

typedef matrix<double> data;

它声明了一个名为data的新类型,类型为matrix<double>,而不是对象。试试这个:

typedef matrix<double> data_type;
data_type data;
data.set_size(rows,9);

答案 1 :(得分:2)

这一行

typedef matrix<double> data;

定义名为data的类型(类型名称非常差)。

您很可能只想删除typedef

matrix<double> data;
data.set_size(rows,9);