似乎无法让简单的堆栈实现正常工作。我只是试图获得两个不同的类(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!
我认为我打破了One Definition Rule。我是对的吗?
答案 0 :(得分:1)
是的,每个变量必须只定义一次。 在C.cpp。
中使用extern A a
答案 1 :(得分:1)
通过在B.cpp中创建A a
和在C.cpp中创建A a
,你实际上有2个不同的对象,它们不会指向同一个堆栈。
实现相同目标的另一种方法是将A
作为单身对象。