#if ( defined(__BORLANDC__) || _MSC_VER ) && !defined( __GNUG__ )

river4321 2008-04-29 10:43:52
#if ( defined(__BORLANDC__) || _MSC_VER ) && !defined( __GNUG__ )
inline float abs (float v) { return (float)fabs( v); }
inline double abs (double v) { return fabs( v); }
inline long double abs (long double v) { return fabsl( v); }
#endif


Error 1 error C2084: function 'float abs(float)' already has a body e:\2008 pointposition\tclmatrix.h 158

Error 2 error C2084: function 'double abs(double)' already has a body e:\2008 pointposition\tclmatrix.h 159

Error 3 error C2084: function 'long double abs(long double)' already has a body e:\2008 pointposition\tclmatrix.h 160
//****************************************************************************
matrixT& operator += (const matrixT& m) _THROW_MATRIX_ERROR;

Warning 6 warning C4290: C++ exception specification ignored except to indicate a function is not __declspec(nothrow) e:\2008 pointposition\tclmatrix.h 241


在vc6.0里面是不报错的,2008里面就出现上面一堆东西,不知道怎么回事?
...全文
825 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
mymtom 2008-04-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ljuncong 的回复:]
在前边加上
#define __GNUG__

[/Quote]
不建议这么用
因为
__GNUG__是g++的标识
__GNUC__是gcc的标识
mymtom 2008-04-30
  • 打赏
  • 举报
回复
楼主的问题在于代码开发时还没有VS2008, 所以修改_MSC_VER的判断.
在VS2005的math.h里已经有
inline long __CRTDECL abs(__in long _X)
{return (labs(_X)); }
等的定义了, 所以会报错, 而VS2005的_MSC_VER为1400, 所以建议改为:

#include <cmath>
#if (defined(__BORLANDC__) || (_MSC_VER < 1400)) && !defined(__GNUG__)
inline float abs (float v) { return (float)fabs( v); }
inline double abs (double v) { return fabs( v); }
inline long double abs (long double v) { return fabsl( v); }
#endif

这样应该在VC6, VS2005, VS2008上都能正确编译.
river4321 2008-04-30
  • 打赏
  • 举报
回复
多谢各位!
baihacker 2008-04-29
  • 打赏
  • 举报
回复

fortran 2003


C++矩阵库:blitz(不错,泛型写的) (Cooperware感觉这个写得太简单了,但是很清晰)
C矩阵库:Meschach(这个代码没有看过)
HelloDan 2008-04-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 river4321 的回复:]
baihacker的回答是正确的,&& 0 是什么情况?还有
matrixT& operator += (const matrixT& m) _THROW_MATRIX_ERROR;

Warning 6 warning C4290: C++ exception specification ignored except to indicate a function is not __declspec(nothrow) e:\2008 pointposition\tclmatrix.h 241


一堆的警告不知道怎么回事?

我不是计算机专业,所以老觉得算出数据来就结了,真想好好学下fortran用算了,c++有关语言本身的内容就…
[/Quote]

劝你不要用Fortran,除非你周围的人都在用,FORTRAN现在只是用于数值算法方面的使用,这方面C/C++也非常出色。要不用MATLAB还好一点,如果不想学C/C++. 我就学过FORTRAN,就是为了用来计算的,不是太难学,只是周围会的人太少了,而且资料也少得可以,总之有问题了你不知怎样解决,那样才是最痛苦。不过如果你还在校可能图书馆里面有一些吧,我这里的图书馆有一大堆6 70年代的手抄的,新的非常少,不过标准现在好像是FORTRAN90了吧,也有些东西不同了,不过应该向下兼容。
ouyh12345 2008-04-29
  • 打赏
  • 举报
回复
在命名空间里使用它们
Treazy 2008-04-29
  • 打赏
  • 举报
回复
重定义了

看你用的是哪个了,一般库里的预编译开关不要进行修改

你可以改你程序中的开关
Treazy 2008-04-29
  • 打赏
  • 举报
回复
hacker的做法不提倡!
baihacker 2008-04-29
  • 打赏
  • 举报
回复
#if ( defined(__BORLANDC__)  ¦¦ _MSC_VER ) && !defined( __GNUG__ ) 
改成
#if ( defined(__BORLANDC__) ¦¦ _MSC_VER ) && !defined( __GNUG__ ) && 0
river4321 2008-04-29
  • 打赏
  • 举报
回复
baihacker的回答是正确的,&& 0 是什么情况?还有
matrixT& operator += (const matrixT& m) _THROW_MATRIX_ERROR;

Warning 6 warning C4290: C++ exception specification ignored except to indicate a function is not __declspec(nothrow) e:\2008 pointposition\tclmatrix.h 241


一堆的警告不知道怎么回事?

我不是计算机专业,所以老觉得算出数据来就结了,真想好好学下fortran用算了,c++有关语言本身的内容就太多了,不可能把时间都花在语言上吧?众位高手怎么认为?
ljuncong 2008-04-29
  • 打赏
  • 举报
回复
在前边加上
#define __GNUG__

64,691

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧