C++ C++;链接来自包含相同符号的不同项目的两个对象文件时发生链接器错误

C++ C++;链接来自包含相同符号的不同项目的两个对象文件时发生链接器错误,c++,visual-studio,linker,dependencies,c++-cx,C++,Visual Studio,Linker,Dependencies,C++ Cx,我有两个项目(ProjA和ProjB)。在ProjA中,我创建了TypeA.obj,其中包含TypeA的定义。ProjB依赖于ProjA。在ProjB的obj中,我使用TypeA 问题出现在ProjC的链接器阶段,该阶段链接TypeA.obj和Sth.obj。我错误地说A型已经在某物obj中定义了 < C++ >是否可以链接多个Objo文件,每个Obl文件都包含相同的符号(在这种情况下,TypeA符号)?< /P> 编辑 好的,现在我将详细介绍。首先,当我启动这个线程时,我把我的问题描述为与C+

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

问题出现在ProjC的链接器阶段,该阶段链接TypeA.obj和Sth.obj。我错误地说A型已经在某物obj中定义了

< C++ >是否可以链接多个Objo文件,每个Obl文件都包含相同的符号(在这种情况下,TypeA符号)?< /P> 编辑

好的,现在我将详细介绍。首先,当我启动这个线程时,我把我的问题描述为与C++有关。 尽管我在c++/cx方面有问题。我认为这是C++和C++的通用问题。经过一些分析 我不这么认为了。原谅我这个错误

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

下面我将向您介绍我在VisualStudio中的解决方案的更详细描述

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中定义(取决于首先链接的是哪个)。您需要为这些项目创建名称空间,并使用这些名称空间来标识各个对象。与我们使用std名称空间相同

std::cout << "Hello World!" <<std::endl;

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

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


您可能想在您的问题(例如VisualC++)中添加另一个标记,以获得如何对项目进行重构的更具体帮助,这取决于IDE。

两个Objo文件,即投影链接,包含完全相同的类型Type。链接两个共享同一名称的不同类型不是问题。尝试(但失败)的链接可能会提供更多信息。除此之外,听起来您应该使用动态代码模块(例如Windows中的DLL,Linux中的.so)来实现TypeA。