2013-11-19 5 views
0

Привет всем У меня есть следующий класс: "Verification.h"статический шаблон constexpr ошибка


#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; 

Но я получаю следующие erros:

  1. Verification.cpp | 16 | об ошибке: 'это' не является константным выражением |
  2. Verification.cpp | 16 | note: в аргументе шаблона для типа 'long int' |
  3. Verification.cpp | 16 | error: недопустимый тип объявления до ';' маркер |

Как я могу решить эту проблему?

спасибо.


правку на основе ответа ММ:

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

Вы не можете использовать переменную ('rows') для создания экземпляра шаблона. –

+1

Вам нужна константа времени компиляции вместо переменной 'rows' – Hulk

+0

ok Я узнал, что мы можем использовать функцию-член set_size(), можете ли вы увидеть отредактированный вопрос –

ответ

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); 
+0

Так что я не могу использовать его во время выполнения? –

+0

Нет, вы не можете. – deepmax

+1

@HaniGoc Pass 0 как матричный аргумент 'matrix < 0, 9 >' и передать 'rows' в качестве аргумента runtime для конструктора. – Potatoswatter

2

Эта линия

typedef matrix<double> data; 

Определяет тип имени data (который является очень плохим именем для типа).

Скорее всего, вы просто хотите удалить typedef:

matrix<double> data; 
data.set_size(rows,9); 
Смежные вопросы