类成员数组的实现:数组下标的无效类型

时间:2013-11-11 18:16:18

标签: c++ arrays

我是C ++的新手,我有一个项目,我需要为一个使用课程的音乐会组织座位表。麻烦的是,我在我的很多实现代码中得到错误消息“错误:无效类型'类型[int]'对于数组下标”,尽管我合理地确定我的类中的数组声明是合法的并且已经实现正确。

以下是包含类的标题代码:

#ifndef HALL_H
#define HALL_H

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

const double     PRICE_HI = 200.0;
    const int MIN_HI_SEAT = 5;
    const int MAX_HI_SEAT = 16;
    const char MAX_HI_ROW = 'H';
const double     PRICE_LO = 150.0;
const char       MAX_ROWS = 'N';
const int        NUM_ROWS = 14;
const int       NUM_SEATS = 20;
const int         MAX_RES = 12;
const double     DISCOUNT = 0.9;
const string        BLANK = "---";
const int        NUM_DAYS = 7;

class Hall {
    public:
        string  name[NUM_ROWS][NUM_SEATS];

        Hall         ();
        bool request (string, int, string, int);
        bool cancel  (string);
        void print   ();

    private:    
        char     row[NUM_ROWS];
        int     seat[NUM_SEATS];
        bool      hi[NUM_ROWS][NUM_SEATS];
        double price[NUM_ROWS][NUM_SEATS];

        bool process  (string, int, string, int);
        void revenue  ();
        string enough (int, string, bool);
        bool count    (int, bool);
        void make     (string, int, string, int, bool, string);
        void assign   (string, int, int, int, int, bool, bool, string);
        void leftover (string, int, int);
        void output   (string, int, int, int);
};

#endif

以下是实现中的构造函数,作为获取错误消息的代码示例:

#include <iostream>
#include "hall.h"
using namespace std;

    Hall::Hall()
{   
    char row = 'A';
    int seat = 1;
    for (int i = 0; i < NUM_ROWS; i++) {
    for (int j = 0; j < NUM_SEATS; j++) {
        row[i]      = row;
        seat[j]     = seat;
        name[i][j]  = BLANK;
        price[i][j] = 0;
        if (row[i]  <= MAX_HI_ROW  &&
            seat[j] >= MIN_HI_SEAT &&
            seat[j] <= MAX_HI_SEAT) {
            hi[i][j] = true;
        } else {
            hi[i][j] = false;
        }
        seat++;
    }
    seat = 1;
    row++;
    }
}

以下是构造函数的错误消息:

hall.cpp: In constructor ‘Hall::Hall()’:                                                                                         
hall.cpp:11: error: invalid types ‘char[int]’ for array subscript
hall.cpp:12: error: invalid types ‘int[int]’ for array subscript
hall.cpp:15: error: invalid types ‘char[int]’ for array subscript
hall.cpp:16: error: invalid types ‘int[int]’ for array subscript
hall.cpp:17: error: invalid types ‘int[int]’ for array subscript

我已经被这一段时间困惑了,并感谢任何帮助。

干杯

3 个答案:

答案 0 :(得分:2)

这些局部变量:

char row = 'A';
int seat = 1;

隐藏具有相同名称的成员。您可以选择不同的名称,也可以this->rowthis->seat访问成员。

答案 1 :(得分:0)

您的变量名称是重复的,本地行变量涵盖您的行数组变量。

答案 2 :(得分:0)

使用与类的数据成员相同的方式命名构造函数的局部变量是一个非常糟糕的主意。那么这些陈述意味着什么?

row[i]      = row;
seat[j]     = seat;

至少写一下

会更好
this->row[i]      = row;
this->seat[j]     = seat;

Hall::row[i]      = row;
Hall::seat[j]     = seat;