2010-11-08 81 views
0

我在因特网上找到了一个arraylist类,在http://code.google.com/p/arraylist/downloads/detail?name=arraylist-v1.zipArrayList C++问题

在使用MS Visual C++的Windows上编译好,在OS X下使用GCC我会得到大量的错误。这里的错误输出:

"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf 
"/usr/bin/make" -f nbproject/Makefile-Debug.mk dist/Debug/GNU-MacOSX/consolerpg 
mkdir -p build/Debug/GNU-MacOSX 
rm -f build/Debug/GNU-MacOSX/arraylist.operators.o.d 
g++ -fpermissive -c -g -MMD -MP -MF build/Debug/GNU-MacOSX/arraylist.operators.o.d -o build/Debug/GNU-MacOSX/arraylist.operators.o arraylist.operators.cpp 
arraylist.operators.cpp:86: error: redefinition of 'datatype& arraylist<datatype>::operator[](int)' 
arraylist.operators.cpp:86: error: 'datatype& arraylist<datatype>::operator[](int)' previously declared here 
arraylist.operators.cpp:100: error: redefinition of 'const datatype& arraylist<datatype>::operator[](int) const' 
arraylist.operators.cpp:100: error: 'const datatype& arraylist<datatype>::operator[](int) const' previously declared here 
arraylist.operators.cpp:128: error: redefinition of 'const arraylist<datatype>& arraylist<datatype>::operator=(const arraylist<datatype>&)' 
arraylist.operators.cpp:128: error: 'const arraylist<datatype>& arraylist<datatype>::operator=(const arraylist<datatype>&)' previously declared here 
arraylist.operators.cpp:157: error: redefinition of 'arraylist<datatype> arraylist<datatype>::operator+(const arraylist<datatype>&)' 
arraylist.operators.cpp:157: error: 'arraylist<datatype> arraylist<datatype>::operator+(const arraylist<datatype>&)' previously declared here 
arraylist.operators.cpp:186: error: redefinition of 'const arraylist<datatype>& arraylist<datatype>::operator+=(const arraylist<datatype>&)' 
arraylist.operators.cpp:186: error: 'const arraylist<datatype>& arraylist<datatype>::operator+=(const arraylist<datatype>&)' previously declared here 
arraylist.operators.cpp:201: error: redefinition of 'arraylist<datatype> arraylist<datatype>::operator-(const datatype&)' 
arraylist.operators.cpp:201: error: 'arraylist<datatype> arraylist<datatype>::operator-(const datatype&)' previously declared here 
arraylist.operators.cpp:223: error: redefinition of 'const arraylist<datatype>& arraylist<datatype>::operator-=(const datatype&)' 
arraylist.operators.cpp:223: error: 'const arraylist<datatype>& arraylist<datatype>::operator-=(const datatype&)' previously declared here 
arraylist.operators.cpp:256: error: redefinition of 'arraylist<datatype> arraylist<datatype>::operator*(const int&)' 
arraylist.operators.cpp:256: error: 'arraylist<datatype> arraylist<datatype>::operator*(const int&)' previously declared here 
arraylist.operators.cpp:280: error: redefinition of 'const arraylist<datatype>& arraylist<datatype>::operator*=(const int&)' 
arraylist.operators.cpp:280: error: 'const arraylist<datatype>& arraylist<datatype>::operator*=(const int&)' previously declared here 
arraylist.operators.cpp:322: error: redefinition of 'arraylist<datatype> arraylist<datatype>::operator/(const int&)' 
arraylist.operators.cpp:322: error: 'arraylist<datatype> arraylist<datatype>::operator/(const int&)' previously declared here 
arraylist.operators.cpp:347: error: redefinition of 'const arraylist<datatype>& arraylist<datatype>::operator/=(const int&)' 
arraylist.operators.cpp:347: error: 'const arraylist<datatype>& arraylist<datatype>::operator/=(const int&)' previously declared here 
arraylist.operators.cpp:367: error: redefinition of 'bool arraylist<datatype>::operator==(const arraylist<datatype>&)' 
arraylist.operators.cpp:367: error: 'bool arraylist<datatype>::operator==(const arraylist<datatype>&)' previously declared here 
arraylist.operators.cpp:394: error: redefinition of 'bool arraylist<datatype>::operator!=(const arraylist<datatype>&)' 
arraylist.operators.cpp:394: error: 'bool arraylist<datatype>::operator!=(const arraylist<datatype>&)' previously declared here 
arraylist.operators.cpp:418: error: redefinition of 'bool arraylist<datatype>::operator>(const arraylist<datatype>&)' 
arraylist.operators.cpp:418: error: 'bool arraylist<datatype>::operator>(const arraylist<datatype>&)' previously declared here 
arraylist.operators.cpp:425: error: redefinition of 'bool arraylist<datatype>::operator<(const arraylist<datatype>&)' 
arraylist.operators.cpp:425: error: 'bool arraylist<datatype>::operator<(const arraylist<datatype>&)' previously declared here 
arraylist.operators.cpp:432: error: redefinition of 'bool arraylist<datatype>::operator>=(const arraylist<datatype>&)' 
arraylist.operators.cpp:432: error: 'bool arraylist<datatype>::operator>=(const arraylist<datatype>&)' previously declared here 
arraylist.operators.cpp:438: error: redefinition of 'bool arraylist<datatype>::operator<=(const arraylist<datatype>&)' 
arraylist.operators.cpp:438: error: 'bool arraylist<datatype>::operator<=(const arraylist<datatype>&)' previously declared here 
make[2]: *** [build/Debug/GNU-MacOSX/arraylist.operators.o] Error 1 
make[1]: *** [.build-conf] Error 2 
make: *** [.build-impl] Error 2 

BUILD FAILED (exit value 2, total time: 427ms) 

是否有某种VC++兼容性标志的,甚至更好,你能提供一个样本修正,这样我就可以纠正他们呢?

谢谢!

Yvan

+0

你可以发布你的makefile吗? - 或者只是检查Steve M的回答 - 我认为他已经知道了。 – 2010-11-08 17:12:52

回答

2

没有兼容性标志。你看过STL list吗?它已经实现了visual C++和gcc,并可以做你想做的。

+0

它怎么叫? – friedkiwi 2010-11-08 18:12:28

+0

哎呀:)。找到它;)对此评论抱歉。 – friedkiwi 2010-11-08 18:12:57

5

我的猜测是,即使arraylist.h包含它们,你也在编译cpp文件。让我们来看看代码...

// arraylist.operators.cpp 

#ifndef __arraylist_CLASS__ 
#include "arraylist.h" 
#endif 

,然后我们有

// arraylist.h 

#include "arraylist.cpp" 
#include "arraylist.operators.cpp" 

所以,如果你编译arraylist.operators.cpp,它包括arraylist.h,其中包括arraylist.operators .cpp ...

这个班级看起来像一块垃圾,只是使用std::vector

+0

*永远不会*包含头文件中的.cpp文件,但我知道原始代码已从网上复制过来。如果您必须包含某些内容但希望将其标记为非公开内容,则只需以不同的名称命名,如blah_detail.hpp,_blah.inc等。 – 2010-11-08 17:42:14