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

标签 c++ stack one-definition-rule

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

A.cpp

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

啊啊

#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

关于c++ - 在多个类中实现堆栈时的单一定义规则 (ODR),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30502094/

相关文章:

vector::push_back() 中的 C++ 奇怪行为

c++ - 我什么时候应该为函数/方法写关键字 'inline'?

c++ - c++中的一个定义规则

c++ - 模板特化存在 ODR 违规

c++ - ubuntu 上 libpq header 的 "standard"位置?

c++ - 如何使用 C 或 C++ 函数获取特定文件夹中的文件数?

C++ 结构继承

r - 根据栅格图层名称上的特定模式从栅格堆栈中选择栅格图层

java - 固定大小的Java栈

c - 如何正确使用循环和堆栈来模拟递归?