解决此错误,同时在模板中使用'export'关键字?

时间:2010-07-28 11:56:00

标签: c++ templates export

计划:main.cpp

 struct X {
            int x;
           };

export template <class T> T const& min(T const&, T const&);

int main() 
 {
  return min(2, 3);
 } 

x.cpp

 struct X {
    int  x; 
     };

 export template <class T> T const& min(T const &a, T const &b) {
 return a<b ? a : b;
  } 

错误:使用gcc编译

 export.cpp:23: warning: keyword ‘export’ not implemented, and will be ignored
 export.cpp: In function ‘int main()’:
 export.cpp:27: error: call of overloaded ‘min(int, int)’ is ambiguous

 swap.cpp:16: warning: keyword ‘export’ not implemented, and will be ignored

错误:使用EDG编译器进行编译

export.cpp", line 27: error: more than one instance of overloaded function    
export.cpp", line 23: error: support for exported templates is disabled
swap.cpp", line 16: error: support for exported templates is disabled

有人能解决这个问题吗?

有人解释导出关键字的用法吗?

3 个答案:

答案 0 :(得分:7)

export关键字非常无用,据我所知,EDG是唯一可以实现它的编译器。该关键字在C ++ 0x中已弃用。至于它的用法 - 甚至不考虑它。

答案 1 :(得分:2)

看起来您的编译器不支持单独的模板编译。通常的做法是不使用单独的模板编译并在头文件中分发模板。除此之外,我发现了几个问题。

  1. 从声明中删除导出关键字。这应该照顾调用重载'min(int,int)'是不明确的错误消息。模板可以定义为在程序中仅导出一次。
  2. X 定义了两次。为什么?
  3. P.S。我从未见过任何使用导出模板的代码。不久前,当我学习C ++时,我尝试的每个编译器都不支持导出的模板。难怪它将从C ++中弃用。

答案 2 :(得分:0)

export关键字已经discussed here on SO