3

I'm building a class where the one variable is a 2d vector. How do I set it so I have an initial size? I tried the below but get an error, expected ‘,’ or ‘...’ before numeric constant. Plus I get errors for every line where i try to set a value to pncode, invalid types ‘[int]’ for array subscript.

Here's the class:

#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_ */
postelrich
  • 3,274
  • 5
  • 38
  • 65

1 Answers1

4

The code you have now, vector<vector<int>> pncode(5, vector<int>(5));, would suffice for a C++11 compiler. Until then, you have to initialize pncode in your constructors. (and you may also need to add a space between the angle brackets; >>.)

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

I also took the liberty of replacing your default constructor with a default argument, changing the parameter types to const&, and eliminating the manual copying of vector elements.

bames53
  • 86,085
  • 15
  • 179
  • 244
  • Thanks that fixed that problem but now when I try a vector of postnet called pcodes, pcodes.push_back(postnet(pnc)); from the main I get no matching function for call. This is where pnc is set as vector > pnc(5, vector(5)); – postelrich Jul 05 '12 at 19:56
  • @riotburn I don't see why that would be. This compiles just fine for me given the changes I show: `vector pcodes; vector > pnc(5, vector(5)); pcodes.push_back(postnet(pnc));` – bames53 Jul 05 '12 at 20:47
  • @barnes53 I tried restarting Eclipse and now it compiles. Eclipse is slow to resolve changes. Thanks for your help! – postelrich Jul 06 '12 at 01:23