【问题标题】:passing class object between 50...60 files在 50...60 个文件之间传递类对象
【发布时间】:2012-08-15 07:34:06
【问题描述】:

我用 C++ 编写 OOP 软件,我需要在 50...60 个文件之间传递我的类的实例。不幸的是,我使用了一个使用回调函数而不是对象的库。

问题: 我在 cpp 文件之间使用了一些状态,例如 struct,但我得到了multiple definition 错误或...如何在 50...60 个类之间传递每个类的一个实例?

Class A{}; A *instanceA = new A();
Class B{}; B *instanceB = new B();
.
.
.
Class Z{}; Z *instanceZ = new Z();

我需要在文件之间传递 intaanceA、intanceB 等。你有什么想法吗?

【问题讨论】:

    标签: c++ file oop struct instance


    【解决方案1】:

    我怀疑您在头文件中定义了实例并将其包含在多个文件中:

    A.h:

    class A{};
    
    A* instanceA = new A();
    

    b.cppc.cpp都是#include <A.h>,导致多重定义错误。

    要更正,您可以使用extern 声明头文件中的实例并将其定义在一个.cpp文件中:

    A.h:

    class A{};
    extern A* instanceA;
    

    A.cpp:

    A* instanceA = new A();
    

    另一个原因是在头文件中使用了extern,但在多个.cpp 文件中定义了instanceA(就像这里的情况一样)。

    【讨论】:

    • @seg_fault,你能把声明instanceA的头文件贴出来吗?
    • class AudioCallbackData { public: AudioCallbackData(); class1 *socketPtr; class2 *mainCorePtr; class3 *audioCorePtr; class4 *devPtr; class5 *audioMixer; }; extern AudioCallbackData *audioCallbackDataPtr;
    • 然后我定义了两个 cpp 文件:AudioCallbackData *audioCallbackDataPtr = new AudioCallbackData() ,但随后更改为AudioCallbackData *audioCallbackDataPtr,但在两种状态下我得到了multiple definition.
    • 只在一个.cpp文件中定义。所有.cpp 文件都将共享该实例。
    • 好的,我得到了很好的结果:我的错误:我在每个 cpp file 中定义。我应该在一个 cpp file 中定义。
    猜你喜欢
    • 1970-01-01
    • 2017-04-03
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    相关资源
    最近更新 更多