2017-06-12 59 views
1

我正在学习Enterprise Architect,到目前为止,它似乎是一个不错的工具。这就是说,我在代码生成时遇到了问题。我希望生成的代码被分开,以便类声明在.h文件中,实现在.cpp文件中(不在模板类中)。例如,我期望生成的代码对一些类,美孚,看起来像:企业架构师 - 独立代码生成头文件和实现

foo.h中

class Foo 
{ 
    public: 
     Foo(); 
     int GetSomeInt(); 
     void SetSomeInt(int a); 

    private: 
     int someInt; 
} 

Foo.cpp中

Foo::Foo() 
{ 
} 

int Foo::GetSomeInt() 
{ 
} 


void Foo::SetSomeInt(int a) 
{ 
} 

相反,我得到一个头文件所有上面的代码,当我尝试在多个文件中使用Foo时,这些代码在以后显然会导致问题,这些文件都链接在一起。我怎么能告诉工具,我想单独的文件的类声明和实施?

+0

你并不是真的想为每个类都有单独的翻译单元(.cpp)。只要方法被标记为内联,您就可以在许多翻译单元中使用它们。请注意,由于您尚未提供实际生成的输出,因此无法判断它是否正常。 – VTT

+0

@VTT一个公平的点。我没有在我的模型中标记任何内联。对于简单的getter/setter方法,内联是好的,但不可避免地会出现一些我不想内联的更复杂的方法。我将用一些实际输出来更新问题。 – CodingHero

+0

@VTT,除非生成** inline'关键字会导致问题。 –

回答

1

经过一些试图回应评论的进一步实验,我发现至少有一部分是我的问题。我试图生成代码的原始模型类是模板类。但是,即使在删除模板之后,仍然会在.h文件中生成所有实现。 .cpp文件也被生成,但仅包含引用.h文件中的内容的using语句。

创建新建模类后,我发现“正常”行为实际上是我所期望的:类定义存储在.h文件中,而实现细节存储在.cpp文件中。我也尝试创建一个模板类,然后删除模板;行为如预期一样。看来,我一定对我原来的课程做了一些奇怪的事情,但我还没有想出如何撤消。

感谢那些提供意见的人!