ベクトルをすべて格納するにはを使用します。 Record
クラスには、student
とその年齢が含まれます。コマンドを取得して特定のメソッドを呼び出すと仮定します。しかし、私はそれをコンパイルすると、 "t
は宣言されていません"と言いました。しかし、私は既にテーブルt
として宣言しています。表示方法を変更せずにprivate
vector
にアクセスするにはどうすればよいですか。C++で複数のクラスを持つベクトルで項目にアクセスして格納する方法
class student{
public:
int id;
string name;
student();
student(int,string);
};
class Record{
public:
student student;
int age;
};
class table{
public:
void Insert(student x,int y);
void Print(table t)
private:
vector <Record> records;
};
void Insert(student x,int y){
Record r;
r.student=x;
r.grade=y;
t.records.push_back(r);
}
void Print(table t){
sort(t.record.begin() , t.record.end());
vector<Record>::iterator itr;
for(itr = t.record.begin() ; itr != t.record.end() ; itr++)
cout << (*itr).student.id << '\t' << (*itr).student.name << '\t' << (*itr).age << endl;
}
int main(){
student x;
table t;
string command,name;
int id,age;
while (cin >> command){
if (command=="Insert"){
cin >> id >> name>> grade;
student s(id,name);
t.InsertStudent(s,grade);
}else if (command == "Print"){
t.Print(t);
}else{return 0;
}
}
エラーメッセージは次のとおりです。
t
は、私はクラス名を大文字にしているし、問題がまだ存在するt.records.push_back(r);
にこのスコープで宣言されていませんでした。
エラーメッセージは何ですか?どの行?プライベートメンバーにアクセスする場合は、そのメンバー用のゲッター関数を作成します。クラスの名前をそのクラスの変数インスタンスの名前(レコードクラスの生徒)として使用しないでください。クラス名には大文字小文字を使用することをお勧めします。 –
あなたは良い本を見つけて、オブジェクト指向プログラミング入門資料を読むべきです。たとえば、 'class Table'(o_weismanの右辺はクラス名を大文字にする)は' void print(); 'を持ち、ファイルスコープで' void Table :: print(){...} 'を持ち、そこを参照する必要があります( '' t 'を除いて) ''レコード ''に変換します。 –
エラーメッセージは「t.records」でこのスコープで宣言されていません。 – WILLIAM