2012-06-30 81 views
0

我.INL和.cpp文件,.INL文件包含模板功能,我宣布在类似下面的全局变量,模板功能compilng错误

INT global_value = 0; 和链接使用extern关键字在编译程序我得到了下面的错误

多发声明错误 先在这里定义的错误

可以在任何一个建议我为什么我收到此错误后,.cpp文件?

+0

你能发布更多的实际代码吗?即将.inl和.cpp文件修剪至导致错误所需的最小值,然后在此处发布。 – Tim

+0

.inl仅用于在您的用例中使用内联链接的内容,其中global_value不是。 – Dani

+0

我想你应该使用一些'#define's(宏)。 – 2012-06-30 20:11:00

回答

2

总之 - 在cpp文件,具有:

int global_value = 0;

,并在INL文件,具有:

extern int global_value;

全局变量应该在一个和唯一的声明一个翻译单元(cpp文件)。所有其他翻译单元应直接或通过某个头文件使用extern。就你而言,包含.inl文件的每个翻译都会有效地声明全局,因此会导致错误。因此,请在cpp中声明它,并将extern放入inl(假设您在其他cpp文件中包含inl文件)。

+0

感谢您的回复,我也会尝试这些。更多内容在C++中我很新,我需要进一步说明,.inl包含类模板函数,它也是C++函数的权利?那么为什么他们以.inl格式定义?它是在/CLASSLIB/array.inl中,它们与array.h文件一样,所以现在我想做的事情意味着需要像上面提到的那样在全局声明一个变量,并且在每一个模板函数的第一行中我必须调用AASSERT(global_value!= 0);全局变量在cpp文件中可以实现,请帮助我使用示例程序 – Srini

+0

@Srini,模板编译可能有点棘手 - 您应该多阅读一下。简而言之,inl文件通常包含_definitions_(即实现),而不是包含_declarations_的h文件。他们可能是cpp文件,但包括cpp文件被认为是不好的做法。所以inl文件只是包含模板函数定义的一种方式。现在我想到了,在h文件中使用'extern int global_value'可能会更好。尽管如此,两者都有效。 – eran

+0

谢谢你能提供示例程序,它会更有帮助 – Srini