2014-12-10 163 views
-2

我在第19-23行解决C:2059错误时遇到问题。我确信我创建的矢量数据类型是正确的。我哪里错了?C2059:语法错误:常量

调试器输出: C:\ Qt的\工具\ QtCreator \ BIN \ Neutropenia_Application \ classifier.h:21:错误:C2059:语法错误: '常量'

#ifndef CLASSIFIER_H 
#define CLASSIFIER_H 

#include "patient_data.h" 
#include <QObject> 
#include <vector> 
#include <stdlib.h> 

class Classifier : public QObject 
{ 
    Q_OBJECT 
public: 
    explicit Classifier(QObject *parent = 0); 
    ~Classifier(); 
    void classify(std::vector<patient_data>data, patient_data i); 

    struct CreateSDTable 
    { 
     std::vector<long> sum(3); // C2509 error //element 0 = Tumor, element 1 = Stage, element 2 = Adjuvant 
     std::vector<long> mean(3);  // C2509 error 
     std::vector<long> error(3); // C2509 error 
     std::vector<long> SDL(3); // C2509 error 
     std::vector<long> SD(3); // C2509 error 
    }; 

    CreateSDTable CurrentvsNeutropenic; 
    CreateSDTable CurrentvsNonNeutropenic; 

private: 
/* 
    std::vector<int> calculatesums(std::vector<patient_data> data, patient_data i); 
    std::vector<long> calculatemean(std::vector<int>validpatients, CreateSDTable Neut, CreateSDTable NonNeut); 
    std::vector<long>calculateerror(patient_data d, std::vector<int>m); 
    std::vector<long>calculatSDL(int nvp, CreateSDTable CVN, CreateSDTable CVsNN); 
    std::vector<int> NumofValidPatients(std::vector<patient_data>x); 

    //void classify(std::vector<patient_data>data, patient_data i); 
*/ 
signals: 

public slots: 

}; 

#endif // CLASSIFIER_H 

回答

0

无法初始化成员这种方式的变量。你需要单独声明和初始化:

struct CreateSDTable { 
    std::vector<int> sum; 
    ... 
    CreateSDTable() : sum(3), ... {} 
}; 
+3

*您可以在* C++ 11的小的调整'的std ::矢量总和=标准::矢量(3);' – user657267 2014-12-10 23:56:39

+0

谢谢杰伊·米勒,谢谢user657267,我不会猜到的。 – user3255175 2014-12-11 00:02:25

+0

C++ 11中的另一种方法是'std :: vector sum {0,0,0};'(这些数字是每个成员的初始值,列表的长度给出了该向量的大小) – 2014-12-11 01:07:27