0

我有两个项目(ProjA 和 ProjB)。在 ProjA 中,我创建了包含 TypeA 定义的 TypeA.obj。ProjB 依赖于 ProjA。在 ProjB 的 Sth.obj 中,我使用 TypeA。

问题出现在 ProjC 的链接器阶段,该阶段链接 TypeA.obj 和 Sth.obj。我收到错误说 TypeA 已在 Sth.obj 中定义。

是否可以在 C++ 中链接多个 obj 文件,每个文件都包含相同的符号(在本例中为 TypeA 符号)?

编辑!

好的,现在我将更详细地介绍。首先,当我开始这个线程时,我将我的问题描述为与 c++ 相关,即使我遇到了 c++/cx 的问题。我认为这是 c++ 和 c++/cx 的一般问题。经过一番分析,我不再这么认为了。原谅我这个错误。

很可能我的问题仅与 c++/cx 有关。

下面我将向您详细介绍我在 Visual Studio 中的解决方案

ProjA
    #####MyType.h#####
    #pragma once
    namespace N1
    {
    public ref class MyType sealed
    {
    };
    }

    #####MyType.cpp#####
    #include "pch.h"
    #include "MyType.h"

ProjB
    #####MyTypeUser.h#####
    namespace N2
    {
    [Windows::Foundation::Metadata::WebHostHidden]
    public ref class MyTypeUser sealed
    {
    public:
        void DoSth(N1::MyType){}
    }
    }

    #####MyTypeUser.cpp#####
    #include "pch.h"
    #include "MyTypeUser.h"

ProjC
    links MyType.obj and MyTypeUser.obj

在 ProjC 的链接器阶段,我收到 MyType 已在 MyType.obj 或 MyTypeUser 中定义的错误(取决于首先链接的内容)。

4

2 回答 2

0

一个类定义不可能出现多次,即使它们是相同的。您将需要以不同的方式设置您的项目。可以将同一个类包装到不同的命名空间中以避免冲突,但是这种事情会导致以后非常痛苦的维护问题。最好现在解决。

为什么不创建另一个项目,独立于其他项目,只包含您在几个地方需要的类(或其他类型定义)?

您可能希望在您的问题中添加另一个标签(例如 Visual C++?)以获得有关如何重构项目的更具体的帮助,具体取决于您的 IDE。

于 2013-08-14T12:33:24.080 回答
0

您需要为这些项目创建名称空间,并使用这些名称空间来识别各个对象。与我们使用 std 命名空间相同。

std::cout << "Hello World!" <<std::endl;
于 2013-08-14T11:03:07.927 回答