2017-11-24 16 views
0

私はC++クラスの割り当てを終了しようとしていますが、これまでのところ答えが見つからないという問題がありました。C++のベクタの初期化されていないローカル変数エラー

私がしようとしているのは、ユーザーがループを解除するまで無期限に拡大できるベクターを作成することです。このベクトルは、クラス名オブジェクトを保持し、生徒の名前と成績情報を保持する必要があります。私はクラスが働いている。この時点で私に問題を与えていると思われるプログラムの唯一の部分は、ベクトルです。

エラーC4700:私は、このエラーコード取得維持

初期化されていないローカル変数 '学生は' ここ

を使用し、私の関数である:

私は初期化する方法を
void vectorfctn(){ 
    vector<student> *students; //I'm assuming this is what is causing the error 
    string stud; 
    double ex1; 
    double ex2; 
    double hw; 
    double fex; 
    char exit; 

    do { 
    cout << "Enter Student Name" << endl; cin >> stud; 
    cout << endl << "Enter First Exam" << endl; cin >> ex1; 
    cout << endl << "Enter Second Exam" << endl; cin >> ex2; 
    cout << endl << "Enter Homework" << endl; cin >> hw; 
    cout << endl << "Enter Final" << endl; cin >> fex; 

    student* s1 = new student(stud, ex1, ex2, hw, fex); 
    s1->calcFinalGrade(); 
    students->push_back(*s1); //This is the line referenced by visual studio in the error 

    cout << "Would you like to continue? y or n" << endl; 
    cin >> exit; 
    delete s1; 
    } while (exit != 'n'); 

for (size_t i = 0; i < students->size(); i++) { 
    cout << students->at(i).calcFinalGrade() << endl; 
} 
}; 

ベクターのサイズを制限することなくベクトル?私はベクトルを吸って、本当にそれらを完全に理解していないので、アドバイスをいただければ幸いです。

+2

ベクターは単独で増殖します。反パターンでなければならない1つを に動的に割り当てる必要はありません。とにかくそれを削除しようとしているときに、なぜ新しい学生を作るのですか? – smac89

答えて

-1

push_backを使用して、ベクターに任意のものを追加します。

vector<int> myVec; 
myVec.push_back(2); 
myVec.push_back(3); 

あなたのpush_backの構文が間違っていると思います。 これが役に立ちましたか?

3

studentsベクトルはポインタである必要はありません。
ではなく、ポインタの、vectorオブジェクトを宣言し、students.pushback()

1

最初にvector<student> students;

students->pushback()vector<student> *students;を交換します。

vector<student> students; 

第二に、代わりにポインタとnewを、studentローカルを宣言する。

第3、push_back

1
students.push_back(s1); 

vector *students;vectorなく、ベクター自体のポインタを作成します。 - >を介してメンバ関数を呼び出そうとすると、まだベクトルが作成されていないので、内部で何もpush_backすることができず、したがってエラーになります。

は、この問題を解決するだけで vector *students;で*削除して、あなたはベクトル(宣言)へのポインタを作成するが、実際にはベクトル(定義)を作成されませんでした students.push_back

+0

ありがとうございます。私はそれを考慮しなかったし、それはトリックでした。ありがとう – B1azingPh03nix

0

ですべてstudents->push_backを交換します。他の人が言っているように、単純にスタック上にベクトルを作成します。

#include <iostream> 
#include <string> 
#include <vector> 

using namespace std; 

void vectorfctn() { 
    vector<Student> students; 

    string stud; 
    double ex1; 
    double ex2; 
    double hw; 
    double fex; 
    char exit; 

    do { // todo: validate user input 
     cout << "Enter Student Name" << endl;  getline(cin, stud); 
     cout << endl << "Enter First Exam" << endl; cin >> ex1; 
     cout << endl << "Enter Second Exam" << endl; cin >> ex2; 
     cout << endl << "Enter Homework" << endl; cin >> hw; 
     cout << endl << "Enter Final" << endl;  cin >> fex; 

     //Student s1 = Student(stud, ex1, ex2, hw, fex); 
     //s1.calcFinalGrade(); // does this really need to be here? It's also used below in the for loop 
     //students.push_back(s1); 
     students.push_back(Student(stud, ex1, ex2, hw, fex)); 

     cout << "Would you like to continue? y or n" << endl; cin >> exit; 

    } while (exit != 'n'); 

    for (auto student : students) { cout << student.calcFinalGrade() << endl; } 
}; 
関連する問題