C ++ array bound is not an integer

Привет я делаю программу, которая управляет о вводе информации и печати данных персонала предприятия

Это мой код:

#include <iostream>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>

#define TECLA_ARRIBA 72
#define TECLA_ABAJO 80
#define ENTER 13

using namespace std;

int cant;

class empleado;

class programa
{
public:
    void cabecera();
    void cantidad_de_empleados();
    int constructordemenues(const char *titulo, const char *opciones[], int n);
    void bibliotecademenues(char opcion);
    void gotoxy(int x,int y);
}
cuerpo;

void programa::cabecera()
{
    cout<<"\n\n\t\t\t\t";
    cout<<char(201);
    for(int i=0, x=36; i<=x; i++)
        cout<<char(205);
    cout<<char(187);
    cout<<"\n\t\t\t\t";
    cout<<char(186)<<" <:: Registro de empleados - XYZ ::> "<<char(186);
    cout<<"\n\t\t\t\t";
    cout<<char(200);
    for(int i=0, x=36; i<=x; i++)
        cout<<char(205);
    cout<<char(188);
    cout<<"\n\n\t\t\t\t";
}

void programa::cantidad_de_empleados()
{
    cabecera();
    cout<<"> Cantidad de empleados a manejar: ";
    cin>>cant;
}

int programa::constructordemenues(const char *titulo, const char *opciones[],int n)
{
    int opcionSeleccionada = 1;

    int tecla;
    bool repite = true;
    do
    {
        system("cls");
        cabecera();
        gotoxy(32, 6);
        cout << titulo;
        gotoxy(28, 7 + opcionSeleccionada);
        cout << ">";
        for (int i = 0; i < n; i++)
        {
            gotoxy(32, 8 + i);
            cout << i + 1 << ") " <<opciones[i];
        }
        do
        {
            tecla = getch();
        }
        while (tecla != TECLA_ARRIBA && tecla != TECLA_ABAJO && tecla != ENTER);
        switch (tecla)
        {
        case TECLA_ARRIBA:
            opcionSeleccionada--;
            if (opcionSeleccionada < 1)
                opcionSeleccionada = n;
            break;

        case TECLA_ABAJO:
            opcionSeleccionada++;
            if (opcionSeleccionada > n)
                opcionSeleccionada = 1;
            break;

        case ENTER:
            repite = false;
            break;
        }
    }
    while (repite);
    return opcionSeleccionada;
}

void programa::bibliotecademenues(char opcion)
{
    switch(opcion)
    {

    case 'p':
    {
        cantidad_de_empleados();
        bool repite = true;
        int opcion;
        const char *titulo = "> Elija una opcion:";
        const char *opciones[] = {"Ingresar un nuevo empleado","Verificar datos de uno existente","Salir"};
        int n = 3;
        while(repite)
        {
            opcion = constructordemenues(titulo,opciones,n);
            switch (opcion)
            {
            case 1:
                break;
            case 2:
                break;
            case 3:
                bibliotecademenues('s');
                break;
            }
        }
        break;
    }

    case 's': //menu de salida
    {
        bool repite = true;
        int opcion;
        const char *titulo = "> Desea salir del sistema? ";
        const char *opciones[] =
        {
            "Si","No"
        };
        int n = 2;
        while (repite)
        {
            opcion = constructordemenues(titulo,opciones,n);
            switch (opcion)
            {
            case 1:
                exit(0);
                break;
            case 2:
                repite = false;
                break;
            }
        }
        break;
    }

    }
}

void programa::gotoxy(int x,int y)
{
    HANDLE hcon;
    hcon = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD dwPos;
    dwPos.X = x;
    dwPos.Y= y;
    SetConsoleCursorPosition(hcon,dwPos);
}

int main()
{
    cuerpo.bibliotecademenues('p');
    system("pause>nul");
    return 0;
}

class empleado
{
private:
    string nombres;
    string telefono;
public:
    void ingresar_datos();
    void imprimir_datos();
}
persona[cant];

Моя проблема состоит в том, чтобы он захотел распределить стоимость в переменную cant, но сделав это, составитель бросает мне эту ошибку "array bound is not an integer constant before']' token"

Дополнительный: также мне хотелось бы мочь объявлять, что класс программирует, и помещать ее после main, но меня не распознает объект тело, сделав это: Как я делаю ему?

0
задан 03.01.2017, 21:17
0 ответов

Твоя проблема может сводиться к следующему:

#include <iostream>

int cant;

class empleado;

int main()
{
    cant = 5;
    std::cout << "Hola!";
    return 0;
}

class empleado
{
private:
    std::string nombres;
    std::string telefono;
public:
    void ingresar_datos();
    void imprimir_datos();
}
persona[cant];

С persona[cant]; мы понимаем, что твое намерение состоит в том, чтобы определять array 5 элементов и, - когда составитель показывает тебе ошибку

main.cpp:23:13: ошибка: array bound is not an integer constant before']' token человек [cant];

То, что он говорит тебе, что во время СОСТАВЛЕНИЯ приложения, переменной cant у него нет никакой стоимости, из-за которого ему невозможно знать размер, который у него должен быть.

То, что он просит у тебя, состоит в том, чтобы ты определил эту переменную как const, для того, чтобы составитель знал, что у стоимости есть эта переменная во время Вашей компиляции:

int const cant = 5;

Однако, это не будет служить тебе помощью, так как я понимаю, что то, в чем ты нуждаешься, состоит в том, чтобы определять динамический array объектов типа empleado.

То, что я рекомендую тебе, состоит в том, чтобы ты использовал простой вектор персонала:

#include <vector>

std::vector<empleado> personas;

ОБНОВЛЕНИЕ 1

Используя рисунок твоего приложения, я помещаю тебе пример использования вектора.

#include <iostream>
#include <vector>

class empleado
{
private:
    std::string nombre;
    std::string telefono;
public:

    void ingresar_datos();
    void imprimir_datos();
};

void empleado::ingresar_datos()
{
    std::cout << "Introduce nombre: ";
    std::cin >> nombre;
    std::cout << "Introduce teléfono: ";
    std::cin >> telefono;
}

void empleado::imprimir_datos()
{
    std::cout << "Nombre: " << nombre << std::endl;
    std::cout << "Teléfono: " << telefono << std::endl;
}

int main()
{
    std::cout << "Creando datos\n";

    empleado e1;
    std::vector<empleado> listaEmpleados;

    // Solicitas el ingreso de datos
    e1.ingresar_datos();

    // Lo agregas al vector de empleados
    listaEmpleados.push_back(e1);

    return 0;
}

Однако я делаю тебе важные рассуждения в мой критерий:

  • Я изменил бы использованный рисунок твоего класса, создавая строитель инициализации изменчивая имя и телефон:

    empleado( std::string nombre, std::string telefono ) : nombre(nombre), telefono(telefono) {};

  • Сделал бы введение каждого поля вне класса и использовал бы строитель вместо того, чтобы просить у него объект просить "объедаться" тот же самый

На оставшейся части твоего кода, он слишком широк и я думаю, что он остается вне твоего первоначального сомнения.

2
ответ дан 03.12.2019, 17:53
  • 1
    ты понимаешь хорошо мою проблему Давид, что я ищу, состоит в том, чтобы определять динамический array объектов использованный тип, но я не понимаю решение, которое ты предлагаешь, если ты можешь помещать код, примененный с твоим решением, он был бы благодарен за это много –  03.01.2017, 21:51
  • 2
    Закрой, если ты sirvió утилиты –  04.01.2017, 01:34
  • 3
    я была полезной подсказка строителей, но проблема я это решил другой формы в любом случае помогать спасибо за мне –  04.01.2017, 04:52
  • 4
    Привет, учитесь, как функционируют вектора, правда твой раствор намного лучше, спасибо –  23.02.2017, 00:40

Чтобы упорядочивать эту проблему (по крайней мере в мой случай) верит переменная, которая содержит размер договоренности объектов, и после объявите договоренность внутри main, так он распознает это мне без проблем ej:

int main()
{
   int con;
   cout<<"Ingrese el tamaño del arreglo: ";
   cin>>con;
   cout<<"\n";
   empleado persona[con];
   return 0;
}
0
ответ дан 03.12.2019, 17:53

Теги

Похожие вопросы