C ++未定义的对象引用

时间:2018-02-28 20:06:08

标签: c++ function object

对于上下文,我是C ++的新手,我用Java编程。所以我对C ++语法非常糟糕,并且需要愚蠢的答案。

我似乎无法理解为什么我会收到此错误。我检查了多个答案,但它们都是原始变量。我正在使用对象,我猜测它会导致一些错误,或者我只是失明。

这是我的课程,重点是公共

下的3个静态变量
class SuperMarket
{
    private:
        int count;
        int totalService;
        int totalWait;
    public:
        static CustomerQ * regularLine; // this
        static CustomerQ * expressLine; // this
        static EventQ * eventQueue; // this
    // Constructors
        SuperMarket();
    // Destructor
        ~SuperMarket();
    // Accessors
        void start(int choice, string file);
        static void loop();
    // Mutators
};

我在构造函数

中初始化静态成员
SuperMarket::SuperMarket() // Constructor
{
    count = 0;
    totalService = 0;
    totalWait = 0;
    regularLine = new CustomerQ(); *error*
    expressLine = new CustomerQ(); *error*
    SuperMarket::eventQueue = new EventQ(); *error*
}

除了我在其他地方做SuperMarket :: Object我得到错误。我尝试使用SuperMarket ::并且没有你可以看到,但我的错误并没有消失。当然,在我的SuperMarket课程之外,我也做SuperMarket ::。

2 个答案:

答案 0 :(得分:3)

您只声明了静态类成员;你需要在类之外定义它们,就像使用函数一样。

SuperMarket源文件中:

// You probably want to initialize outside of the constructor, because otherwise it would
// erase your queues whenever a new instance of SuperMarket is created.
CustomerQ* SuperMarket::regularLine = new CustomerQ();
CustomerQ* SuperMarket::expressLine = new CustomerQ();
EventQ* SuperMarket::eventQueue = new EventQ();

SuperMarket::SuperMarket() // Constructor
{
    // Probably don't initialize your statics in here
    // ...

然而,在这种情况下,我认为这些成员不是静止的。静态表示它们应该在包含类的所有实例之间共享;对于不同的SuperMarket,所有人共享同一行客户真的有意义吗?

答案 1 :(得分:2)

在C ++(和Java)中,成员变量前面的关键字static表示一个类成员,即一个为该类存在一次的变量,而不是该类的每个实例都存在一次。

在C ++中(与Java相反),您必须在类定义之外另外定义一个类成员,即:

class SuperMarket {
        ...
        static CustomerQ * regularLine; // this
        ...
};

// .cpp-file:

CustomerQ * SuperMarket::regularLine = nullptr;

SuperMarket::SuperMarket() // Constructor
{
    count = 0;
    ...
}

但是,请注意,在构造函数中(即创建每个对象)将新对象分配给“类成员”(即在程序中只存在一次的静态数据成员)很少有意义。