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

One Definition Rule (ODR) when implementing stack in multiple classes

似乎无法使简单的堆栈实现正常工作。我只是想获得两个不同的 classes (class B & class C) 以便能够在 same[=28= 中推送和打印元素] 堆栈由第三个 class (class 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,您实际上有 2 个不同的对象,它们不会指向同一个堆栈。

实现相同目标的另一种方法是将 A 作为单例对象。