C++ 通过指针访问数组

C++ 通过指针访问数组,c++,class,oop,data-structures,syntax-error,C++,Class,Oop,Data Structures,Syntax Error,我想通过OOP创建一个类似数据库的类。在这个类中,有3个数组作为表中的列。我通过insert()函数插入数据,并通过printEntries()函数打印数据。但是该函数不能访问数组来检索数据 #include <iostream> #include <sstream> #include <fstream> #include <string> using namespace std; class subject{ public:

我想通过OOP创建一个类似数据库的类。在这个类中,有3个数组作为表中的列。我通过
insert()函数
插入数据,并通过
printEntries()函数
打印数据。但是该函数不能访问数组来检索数据

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

class subject{

   public:
      int numOfStudents;
      string subjectId;
      int * marksArray;
      int * indexArray;
      char * gradeArray;
      int index ; // index for inserting data

      subject(int students , string subjectName){

      numOfStudents = students;
      subjectId = subjectName;
      this->index =0 ;
      //creating and pointing to arrays
      int  A[numOfStudents];      marksArray = A;
      int  B[numOfStudents];      indexArray = B;
      char C[numOfStudents];      gradeArray = C;

  }

 void insert(int studentId , int mark , char grade){
 indexArray[index] = studentId;
 marksArray[index] = mark;
 gradeArray[index] = grade; 

 this->index = this->index +1;    
}

int getNumberOfEntries(){
    return index ;
}

 void printEntries(){
        cout<< indexArray[0] << "  O" << marksArray[0] << "  " << gradeArray[0] << endl; 
        cout<< indexArray[1] << "  OOO" << marksArray[1] << "  " << gradeArray[1] << endl; 
        cout<< indexArray[2] << "  OO" << marksArray[2] << "  " << gradeArray[2] << endl;  
      }
  };

 int main(int argc, char const *argv[]){ 
  subject S(10,"Mathematics");
  cout<<S.subjectId<<endl;
  cout<<S.numOfStudents<<endl;
  S.insert(35,34,'A');
  S.insert(33,34,'B');
  S.insert(54,34,'C');
  S.insert(21,34,'D');
  S.insert(14,34,'F');
  S.printEntries();
  return 0;
 }
#包括
#包括
#包括
#包括
使用名称空间std;
班级科目{
公众:
国际学生;
字符串主语;
int*marksArray;
int*索引数组;
字符*数组;
int index;//用于插入数据的索引
主题(int students,字符串subjectName){
学生=学生;
subjectId=subjectName;
这个->索引=0;
//创建并指向数组
int A[numOfStudents];marksArray=A;
int B[numo];indexArray=B;
char C[numOfStudents];gradeArray=C;
}
无效插入(整数studentId、整数标记、字符等级){
indexArray[索引]=学生ID;
marksArray[索引]=标记;
gradeArray[索引]=等级;
此->索引=此->索引+1;
}
int getNumberOfEntries(){
收益指数;
}
作废打印条目(){

cout正如@paddy在对您的问题的评论中指出的,您的问题在构造函数中

//creating and pointing to arrays
int  A[numOfStudents];      marksArray = A;
int  B[numOfStudents];      indexArray = B;
char C[numOfStudents];      gradeArray = C;
您正在做的是保存第一个元素的地址,其余元素在您离开构造函数后消失。幸运的是,它甚至允许您保存第一个插入并引用注释您正在做的是“已定义为未定义的行为”

std::vectors
替换指针,并在那里插入元素将变得更加容易

class subject
{
public: // It's considered bad practive to have public data members in a class
  std::vector<int> marksVector;
  std::vector<int> indexVector;
  std::vector<char> gradeVector;
  // ...

  void insert(int studentId , int mark , char grade){
     indexVector.push_back(studentId);
     marksVector.push_back(mark);
     gradeVector.push_back(grade);

     // No longer need to worry about index for next insert
  }
};
课程主题
{
public://在类中有公共数据成员被认为是不好的做法
std::向量标记向量;
std::向量索引向量;
std::矢量梯度矢量;
// ...
无效插入(整数studentId、整数标记、字符等级){
指数向量。推回(学生ID);
marksVector.向后推(标记);
坡度向量。推回(坡度);
//不再需要担心下一次插入的索引
}
};

正如@paddy在对您的问题的评论中指出的,您的问题在构造函数中

//creating and pointing to arrays
int  A[numOfStudents];      marksArray = A;
int  B[numOfStudents];      indexArray = B;
char C[numOfStudents];      gradeArray = C;
您正在做的是保存第一个元素的地址,其余元素在您离开构造函数后消失。幸运的是,它甚至允许您保存第一个插入并引用注释您正在做的是“已定义为未定义的行为”

std::vectors
替换指针,并在那里插入元素将变得更加容易

class subject
{
public: // It's considered bad practive to have public data members in a class
  std::vector<int> marksVector;
  std::vector<int> indexVector;
  std::vector<char> gradeVector;
  // ...

  void insert(int studentId , int mark , char grade){
     indexVector.push_back(studentId);
     marksVector.push_back(mark);
     gradeVector.push_back(grade);

     // No longer need to worry about index for next insert
  }
};
课程主题
{
public://在类中有公共数据成员被认为是不好的做法
std::向量标记向量;
std::向量索引向量;
std::矢量梯度矢量;
// ...
无效插入(整数studentId、整数标记、字符等级){
指数向量。推回(学生ID);
marksVector.向后推(标记);
坡度向量。推回(坡度);
//不再需要担心下一次插入的索引
}
};

< /代码>你能不能发布你所得到的输出?1)C++不支持VLAs;2)使用指针/引用到定义的作用域之外的局部定义变量是未定义的行为;3)如果你知道运行时的大小而不是巨大的,那么就考虑模板数组大小,否则使用<代码> STD::向量< /代码>;4)不修改对象的er函数(例如
getNumberOfEntries
printEntries
)应该标记<代码> const <代码> > @ dMARCZAK完成!@ PATY,你有什么建议吗?除了我刚才提供的?你能不能把你得到的输出发布?1)C++不支持VLAs;2)使用指针/引用到定义的作用域之外的局部定义变量是未定义行为;3)考虑如果您在运行时知道数组大小,并且数组大小不是很大,则使用不修改对象的成员函数(例如
getNumberOfEntries
printEntries
)应该标记为
const
@DMarczak done!@paddy在将数据推入数据库后,你有什么建议吗?你的意思是,除了我刚才提供的内容之外??像这样的对象。我想操作数据。这意味着我想访问列中的行(按索引在数组中的索引)是否可以使用向量???@Nipunachandimal vectors几乎可以做数组所能做的一切,所以是的。在将数据推送到数据库后,如图中的对象。我想操作数据。这意味着我想访问列中的行(按索引访问数组中的索引)使用向量是否可能?@Nipunachandimal向量几乎可以做数组所能做的一切,所以是的。