似乎无法让一个简单的堆栈实现正常工作。我只是想让两个不同的类(类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对象。