Нестатическая ошибка ссылки на член в массиве с использованием c ++ - PullRequest
1 голос
/ 02 мая 2019

Я новичок в программировании на C ++ и сейчас изучаю все о классах и объектах.Для практики я создал класс Employee и добавил в него несколько членов.Но я заметил, что массив записей дает мне ошибку, указывающую на то, что нестатическая ссылка на элемент должна относиться к определенному объекту.Это происходит только всякий раз, когда я создаю массив в классе Employee.Но когда я вызвал его в своем конструкторе Employee(), он не выделяется как ошибка, а также когда я пытался инициализировать его как глобальную переменную или даже локальную переменную в моем main.cpp (это где main()расположен).Пожалуйста, дайте совет или даже лучшее решение для этого.

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

   class Employee
   {
   private:
   int recordSize = 100;
   int fieldSize = 4;
   string record[recordSize][fieldSize];

   public:
   Employee();
   ~Employee();

   };

main.cpp:

   #include "Employee.h"
   #include<string>
   #include<iostream>
   #include<iomanip>
   #include<fstream>
   using namespace std;

   Employee::Employee() {
      ifstream inFile;
      inFile.open("C:\\Users\\RJ\\Desktop\\employee-info.txt");

      for (int index = 0; index < recordSize; index++) {
          for (int index2 = 0; index2 < fieldSize; index2++) {
             inFile >> record[recordSize][fieldSize];
             }
           }
          }

   Employee::~Employee()
   {
   }

Я также включаю контент employee-info.txt

 ID           Firstname            Lastname                 Sales
 1                Bruno                Mars             120000.00
 2               Lebron               James             150000.00

Ответы [ 2 ]

3 голосов
/ 02 мая 2019

Переменные recordSize и fieldSize должны быть оба static и const (или constexpr) для использования в качестве измерений std::string record 2D-массива.

Они должныбыть const, поскольку граница массива должна быть целочисленной константой.

Они должны быть static, поскольку массив record не может иметь разные размеры для различных экземпляров класса Employee.

Если вы хотите, чтобы двумерный массив мог содержать разные размеры в разных экземплярах класса Employee, вам следует вместо этого выбрать std::vector из std::vector<std::string>.

0 голосов
/ 02 мая 2019

Размеры должны быть constexpr при использовании для определения размеров массива

static constexpr int recordSize = 100;
static constexpr int fieldSize = 4;
string record[recordSize][fieldSize];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...