如何在不同的文件中初始化私有变量并使其保存其他函数的值?

How to initialize private variables in a different file and make it so it holds the value for other functions?

我只需要知道如何让大小、索引和计数器在另一个函数中被调用时保持它们的值。现在,它们只是在被调用时被赋予随机值,而不是我在构造函数中初始化它们的值。我怎样才能解决这个问题?此代码的 objective 是制作一个程序,从程序用户(通过键盘)捕获一串单词并添加输入的 单词到动态字符串数组。 这是 array.cpp 文件

#include "array.h"
using namespace std;

Array::Array()
{
  int size = 100;
  int index = 0;
  int counter = 0;
  counter ++;
  index++;
  string *ptr = new string[size];
}

Array::~Array()
{
  delete ptr;
  ptr = nullptr;
}

void Array::populate()
{
  string word;
  cout << "Enter word to add to array: ";
  cin >> word;
  ptr[index] = word;
}

void Array::printContent()
{
  cout << "Number of words in array: " << counter << endl;
  cout << "Array size: " << size << endl;
  cout << "Words in array: " << endl;
  for (int i = 0; i < counter; i++)
  {
    cout << ptr[i] << endl;
  }
}

void Array::displayMenu() const
{
  cout << "[1]  Add Word\n"
       << "[2]  Print Array Information\n"
       << "[3]  Quit Program\n"
       << "Enter Choice:  ";
}
int Array::getChoice(int & choice1) 
{
  cin >> choice1;   
    while (choice1 < 1 || choice1 > 3) {
      cout << endl;
      cout << "Invalid Entry!!" << endl;
      cout << "Enter Choice:  ";
      cin >> choice1; 
    }
  return choice1;
}
int Array::endProgram(int & start2)
{
  start2 = 0;
  cout << "\n\n\t\tThank you for using this system!!\n\n";
  return start2;
}

这是 array.h 文件

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

class Array {
public:
  Array();
  ~Array();
  void populate();
  void printContent();
  void displayMenu() const;
  int getChoice(int & choice1);
  int endProgram(int & start2);
private:
  int size;
  int index;
  int counter;
  string *ptr;
};

最后这是 main.cpp 文件

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

int main() {
  int choice = 0;
  int start = 1;
  Array theArray;
  while(choice != 3)
  {
    theArray.displayMenu();
    theArray.getChoice(choice);
    if(choice == 1)
    {
      theArray.populate();
    }
    if(choice == 2)
    {
      theArray.printContent();
    }
    if (choice == 3)
    {
      theArray.endProgram(start);
    }
  }
}

您正在 Array 构造函数中定义新的局部变量并隐藏同名的成员变量 -- 这就是为什么不保留该值的原因。

你只需要在定义新变量时指定类型,而不是在分配给现有变量时。要分配给成员变量,这应该是:

Array::Array()
{
  size = 100;
  index = 0;
  counter = 0;
  ptr = new string[size];
  ...
}

此外,在构造函数中使用构造函数初始化列表来初始化值更正确:

Array::Array()
  : size{100},
    index{0},
    counter{0},
    ptr{new string[size]}
{
  ...
}