Search code examples
mysqlpointersconstructorqueuedynamic-allocation

c++ - Heap object member function access


I am not quite sure which question I should be asking so I am gonna go with where the errors pop up.

I am working on a program to stream tick data from Interactive Brokers into a MySQL DB. To remove any bottlenecks that may occur from the difference between stream dl speed and MySQL write speed, I am trying to implement a queue class that will store Tick objects temporarily. Code:

    TickQueue::TickQueue()
    {
        tickQueue = new std::queue<Tick>;
    }

    TickQueue::~TickQueue()
    {
        delete tickQueue;
    }

    void TickQueue::add(Tick t)
    {
        tickQueue->push(t);
    }

    int main()
    {
        time_t dt = time(0);
        struct tm currTime;
        localtime_s(&currTime, &dt);
        TickQueue tq;

        for (int i = 0; i < 5; ++i) 
        { 
            Tick tTick("fx", 1.2151, "SYM", i, currTime); tq.add(tTick); 
        }

        if (tq.size() == 5) { cout << "success" << endl; }



        return 0;
    }

To keep it persistent, I decided to initialize it on the heap. However, I have a feeling this may not be the best implementation.

I also cannot access tq.size() as says size() is not a member function of tq. Is there a way to Construct a new object and have it inherit the members of its underlying structure (std::queue in this case)


Solution

  • When you declared TickQueue, you put a member inside it like this:

    std::queue<Tick> *tickQueue;

    That is, you were saying that TickQueue 'has-a' queue<Tick> inside it.

    Instead, declare TickQueue like this:

    class TickQueue : public std::queue<Tick> {
    }; // TickQueue
    

    Now you're saying that TickQueue 'is-a' queue<Tick>, and inherits all the methods thereof.