在多个类中实现堆栈时使用一个定义规则(ODR)



似乎无法让一个简单的堆栈实现正常工作。我只是想让两个不同的类(类B和类C(能够推送和打印由第三个类(类a(管理的同一堆栈中的元素。

A.cpp

#include "A.h"
void A::pop() {}
void A::push() {}
void A::print() {}  // prints last pushed elements

A.h

#include < iostream >
  class A 
  {
    public:
    void pop();
    void push();
    void print();
  }

B.cpp

#include "B.h"
#include "A.h"
A a;
void B::Text() { a.push(); }
void B::Background() { a.print(); }  // works!

C.cpp

#include "C.h"
#include "A.h"
A _a; // why doesn't A a work? because ODR?
void B::Text() { _a.push(); }
void B::Background() { _a.print(); } // doesn't work! breakpoint shows empty stack!

我觉得我违反了一个定义规则。我说得对吗?

是的,每个变量必须定义一次。在C.cpp.中使用extern A a

通过在B.cpp中创建A a和在C.cpp中的A a,实际上有两个不同的对象,它们不会指向同一堆栈。

实现这一点的另一种选择是将A作为singleton对象。

相关内容

  • 没有找到相关文章

最新更新