数据"成员未在此范围内声明"

时间:2015-03-23 08:09:09

标签: c++ vector initializer-list

我试图创建一个存储对象的向量。我已将该类的头文件添加为私有数据成员。

我正在尝试将此向量初始化为空(以便我稍后可以在程序中向其添加对象)但是当我编译此程序进行测试时,会返回此错误:

  

...错误:' _bookingVector'未在此范围中声明|

我认为问题在于我的默认构造函数上的初始化列表(_bookingVector显然是向量):

Schedule::Schedule() : _bookingVector()
{ }

我的语法错了吗?或者矢量初始化不同?

这是我的代码:

Schedule.h

#ifndef SCHEDULE_H
#define SCHEDULE_H
#include "Booking.h"
#include <vector>    
using namespace std;


class Schedule
{    
    public:
        Schedule();
        void AddBooking(int bday, int btime, int btrainer, int bid);
        void RemoveBooking(int bday, int btime);
        void DisplaySchedule();
        void DisplayAvailableTimeSlots();    
        //For Testing
        void DisplayDebug();

    private:
        vector<Booking> _bookingVector;   

};    
#endif // SCHEDULE_H

Schedule.cpp

#include "Schedule.h"
#include "Booking.h"
#include <vector>
#include <iostream> 

Schedule::Schedule() : _bookingVector()
{ }    

void AddBooking(int bday, int btime, int btrainer, int bid){    
    Booking bookingObject(bday, btime, btrainer, bid);
    _bookingVector.push_back(bookingObject);    

}


void DisplayDebug(){

    for(int i = 0; i < _bookingVector.size(); ++i){    
        cout << _bookingVecotr[i] << endl;    
    }    
}

我非常渴望了解我做错了什么并修复它。

1 个答案:

答案 0 :(得分:0)

问题不在于构造函数,如果没有必要 1 ,它看起来很好。问题是您已将AddBookingDisplayDebug定义为非成员函数,但这些函数应该是成员才能访问该类的其他成员。

将定义修改为Schedule类的范围,因此:

void Schedule::AddBooking(int bday, int btime, int btrainer, int bid) { ...
     ^^^^^^^^^^

void Schedule::DisplayDebug(){ ...
     ^^^^^^^^^^

此外,请勿在标题文件中说using namespace std(我会更进一步,并说不要在任何地方说出来,但对此没有普遍的协议。 )


1您的默认构造函数不会执行编译器生成的任何操作。您可以安全地将其删除。