2012-07-05 35 views
3

我正在构建一个类,其中一个变量是一个2d向量。我如何设置它,以便我有一个初始大小?我尝试了下面的内容,但在数字常量之前得到一个错误,预计','或'...'。另外我得到每一行的错误,我尝试设置一个值为pncode,数组下标为无效类型'[int]'。将2d向量初始化为类变量C++

这里的类:

#ifndef POSTNET_H_ 
#define POSTNET_H_ 

#include <iostream> 
#include <cstdlib> 
#include <string> 
#include <vector> 
using namespace std; 

class postnet 
{ 
private: 
    vector<vector<int>> pncode(5, vector<int>(5)); 
    void encode(vector<int> zip) 
    { 
     for(int i = 0; i < 5; i++) 
     { 
      if(zip[i] == 1 || zip[i] == 2 || zip[i] == 3 || zip[i] == 4 || zip[i] == 5 || zip[i] == 6) 
       pncode[i][0] = 0; 
      else 
       pncode[i][0] = 1; 

      if(zip[i] == 1 || zip[i] == 2 || zip[i] == 3 || zip[i] == 7 || zip[i] == 8 || zip[i] == 9) 
       pncode[i][1] = 0; 
      else 
       pncode[i][1] = 1; 
      if(zip[i] == 1 || zip[i] == 4 || zip[i] == 5 || zip[i] == 7 || zip[i] == 8 || zip[i] == 0) 
       pncode[i][0] = 0; 
      else 
       pncode[i][0] = 1; 
      if(zip[i] == 2 || zip[i] == 4 || zip[i] == 6 || zip[i] == 7 || zip[i] == 9 || zip[i] == 0) 
       pncode[i][0] = 0; 
      else 
       pncode[i][0] = 1; 
      if(zip[i] == 3 || zip[i] == 5 || zip[i] == 6 || zip[i] == 8 || zip[i] == 9 || zip[i] == 0) 
       pncode[i][0] = 0; 
      else 
       pncode[i][0] = 1; 
     } 
    } 
    void decode(vector<int> zip) 
    { 
     int zipd[5]; 

     for(int i = 0; i < 5; i++) 
     { 
      zipd[0] = pncode[i][0] * 7; 
      zipd[1] = pncode[i][1] * 4; 
      zipd[2] = pncode[i][2] * 2; 
      zipd[3] = pncode[i][3] * 1; 
      zipd[4] = pncode[i][4] * 0; 

      for(int j = 0; j < 5; j++) 
      { 
       zip[i] += zipd[j]; 
      } 
      if(zip[i] == 11) 
       zip[i] = 0; 
     } 
    } 

public: 
    postnet() 
    { 
     for(int i = 0; i < 5; i++) 
      for(int j = 0; j < 5; j++) 
       pncode[i][j] = 0; 
    } 
    postnet(vector<int> zip) 
    { 
     encode(zip); 
    } 
    postnet(vector<vector<int> > pnc) 
    { 
     for(int i = 0; i < 5; i++) 
      for(int j = 0; j < 5; j++) 
       pncode[i][j] = pnc[i][j]; 
    } 
    void print_zip() 
    { 
     vector<int> zipc(5); 
     decode(zipc); 

     for(int i = 0; i < 5; i++) 
      cout << zipc[i]; 

     cout << endl; 
    } 

    void print_pncode() 
    { 
     cout << "1"; 
     for(int i = 0; i < 5; i++) 
      for(int j = 0; j < 5; j++) 
       cout << pncode[i][j]; 
     cout << "1" << endl; 
    } 

}; 


#endif /* POSTNET_H_ */ 
+1

vector < vector> pncode(5,vector (5)); – CapelliC 2012-07-05 18:19:18

+0

空出>符号 – user1084113 2012-07-05 18:22:32

+0

vector < vector> pncode(5,vector (5));仍然得到“预期”,或'...'在数字常量之前“ – postelrich 2012-07-05 18:27:19

回答

4

你现在使用的代码,vector<vector<int>> pncode(5, vector<int>(5));,就足够了C++编译器11。在此之前,您必须在您的构造函数中初始化pncode。 (您可能还需要在尖括号之间添加空格; >>。)

postnet(vector<int> const &zip) 
    : pncode(5, vector<int>(5)) 
{ 
    encode(zip); 
} 
postnet(vector<vector<int> > const &pnc = vector<vector<int> >(5, vector<int>(5))) 
{ 
    assert(pnc.size()==5); 
    for (int i=0;i<pnc.size();++i) 
     assert(pnc[i].size()==5); 

    pncode = pnc; 
} 

我还带着一个缺省参数替代默认的构造函数,改变参数类型为const &,并消除了自由手动复制矢量元素。

+0

谢谢你修复这个问题,但现在当我尝试一个名为pcodes,pcodes.push_back(postnet(pnc))的postnet矢量;从主要我得到没有匹配的函数的调用。这是将pnc设置为矢量> pnc(5,vector (5)); – postelrich 2012-07-05 19:56:32

+0

@riotburn我不明白为什么会这样。鉴于我所显示的变化,这对我来说编译得很好:'vector pcodes;矢量> pnc(5,vector (5)); pcodes.push_back(postnet(pnc));' – bames53 2012-07-05 20:47:03

+0

@ barnes53我试着重新启动Eclipse,现在编译。 Eclipse解决更改速度很慢。谢谢你的帮助! – postelrich 2012-07-06 01:23:45