代码之家  ›  专栏  ›  技术社区  ›  user3496101

数据“未在此范围中声明成员”

  •  -1
  • user3496101  · 技术社区  · 10 年前

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

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

    …错误:在此范围中未声明“_bookingVector”|

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

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

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

    这是我的代码:

    附表.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
    

    计划.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 回复  |  直到 10 年前
        1
  •  0
  •   juanchopanza    10 年前

    问题不在于构造函数,如果不必要的话,它看起来很好 1. 。问题是您定义了 AddBooking DisplayDebug 作为非成员函数,但这些函数应该是成员,以便访问类的其他成员。

    修改定义,使其在 Schedule 因此分类:

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

    还有,不要说 using namespace std 在头文件中(我会更进一步说,不要在任何地方说,但在这一点上没有达成共识。)


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