我有两个项目(ProjA和ProjB)。在ProjA中,我创建了包含TypeA定义的TypeA.obj。 ProjB依赖于ProjA。在ProjB的Sth.obj中我使用TypeA。
问题出现在ProjC的链接器阶段,它连接TypeA.obj和Sth.obj。我得到错误,说TypeA已经在Sth.obj中定义。
是否可以在c ++中链接多个obj文件,每个文件包含相同的符号(在本例中为TypeA符号)?
EDIT!
好的,现在我将详细介绍。首先,当我开始这个线程时,我将我的问题描述为与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中定义的错误(依赖于首先链接的)。
答案 0 :(得分:0)
您需要为这些项目创建名称空间,并使用这些名称空间来标识单个对象。与我们使用std命名空间相同。
std::cout << "Hello World!" <<std::endl;
答案 1 :(得分:0)
即使它们完全相同,也不可能多次出现一个类定义。您需要以不同的方式设置项目。可以将同一个类包装到不同的名称空间中以避免冲突,但是这种情况会导致以后非常痛苦的维护问题。现在更好地解决它。
为什么不创建另一个独立于其他项目的项目,它只包含你在几个地方需要的类(或其他类型定义)?
您可能希望在问题中添加另一个标记(例如Visual C ++?),以获取有关如何重构项目的更具体帮助,具体取决于您的IDE。