我已经使用eclipse很长一段时间了,但我最近才将它用于c ++编程。在我的系统上找出如何在eclipse上实际编译c ++是一堆乐趣,但我已经认为这是100%的成功,但现在我偶然发现了另一个恼人的问题。我已经看到如果我在头文件中创建一个类,我可以使用名为&#34的源菜单下的漂亮工具;实现方法"这将从我的头文件中获取我的函数声明,并将它们放在源文件中,并带有可以编码的主体。
今天我正在搞乱一些新代码,我需要一个模板类来处理我正在做的事情,但是当我尝试使用这个实现方法函数时,我发现eclipse告诉我那里有#34; no实现为一个或多个方法找到的文件"而是在我的头文件中创建内联函数(就像我真的需要它!)。这是eclipse中的错误还是有一些无法避免的潜在c ++规则?我似乎不明白为什么让我的类解除为class foo{};
可以正常工作,但是template <typename T> class foo{};
会导致此错误。我知道这是唯一的问题,因为如果我声明一个只有一个公共函数的普通类它可以工作,但如果我采用相同的类并将其声明为模板类,我会发现错误再次发生。
tldr:
class foo{};
,则会将声明的fucntion放入头文件中,并将其置于源文件中,以便编写代码,但如果将类声明为template <typename T> class foo{};
则会失败
答案 0 :(得分:4)
当我尝试使用这个实现方法函数时,我发现eclipse告诉我&#34;没有为一个或多个方法找到实现文件&#34;而是在我的头文件中创建内联函数(就像我真的需要它!)。这是eclipse中的错误还是有一些无法避免的潜在c ++规则?
不,它不是一个错误,而是你真正需要的(正如你所注意到的)。
它最终成为template definitions must be seen from the header file。
的c ++规则因此,Eclipse可以为模板类推断出没有源文件。
您可以将.tcc
或.icc
文件的文件类型设置为c ++源代码,并将其包含在您的模板类标题中(我不确定Eclipse是否足够聪明以放置自动在那里实现ATM,但我非常确定源和头之间的通常切换与这种设置一起工作)。