2010-10-24 95 views
1

我有一大堆ccc代码和一些C++代码的.cc文件的大项目。我想在这个程序中使用一个向量,因为我需要一个无限制的数据类型,这个数据类型很容易让2d(换句话说,我不想使用数组或列表)。 问题是,当我在包含矢量类后运行make时,出现了以前没有得到的错误。唯一的区别是#include <vector>。我没有编写make文件(其中大约有4个或5个),但据我所知,它使用的是GNU编译器。我没有实例化矢量对象,已经包含using namespace std;,并且当我注释掉矢量的include指令时,错误消失。在这个项目的另一个文件中,我使用了队列库,它没有任何问题。问题发生在我将它包含在.h文件中时,它对.cc文件没有问题,但是因为我需要在.h文件中实例化矢量对象,所以我没有使用.cc文件的商品为了这。有人可以帮我解决这个问题吗?链接矢量类的问题

这里是bash的粘贴的,导致错误产生的部分输出复制:

g++ -g -Wall -m32 -Wshadow -I../bin -I../filesys -I../userprog -I../threads -I../machine 
-DUSER_PROGRAM -DFILESYS_NEEDED -DFILESYS_STUB -DHOST_i386 -DCHANGED -c ../threads/main.cc 

g++ -g -Wall -m32 -Wshadow -I../bin -I../filesys -I../userprog -I../threads -I../machine 
-DUSER_PROGRAM -DFILESYS_NEEDED -DFILESYS_STUB -DHOST_i386 -DCHANGED -c ../threads 
/scheduler.cc 

g++ -g -Wall -m32 -Wshadow -I../bin -I../filesys -I../userprog -I../threads -I../machine 
-DUSER_PROGRAM -DFILESYS_NEEDED -DFILESYS_STUB -DHOST_i386 -DCHANGED -c ../threads/synch.cc 

g++ -g -Wall -m32 -Wshadow -I../bin -I../filesys -I../userprog -I../threads -I../machine 
-DUSER_PROGRAM -DFILESYS_NEEDED -DFILESYS_STUB -DHOST_i386 -DCHANGED -c ../threads 
/system.cc 

g++ -g -Wall -m32 -Wshadow -I../bin -I../filesys -I../userprog -I../threads -I../machine 
-DUSER_PROGRAM -DFILESYS_NEEDED -DFILESYS_STUB -DHOST_i386 -DCHANGED -c ../threads 
/thread.cc 

g++ -g -Wall -m32 -Wshadow -I../bin -I../filesys -I../userprog -I../threads -I../machine 
-DUSER_PROGRAM -DFILESYS_NEEDED -DFILESYS_STUB -DHOST_i386 -DCHANGED -c ../threads 
/threadtest.cc 

g++ -g -Wall -m32 -Wshadow -I../bin -I../filesys -I../userprog -I../threads -I../machine 
-DUSER_PROGRAM -DFILESYS_NEEDED -DFILESYS_STUB -DHOST_i386 -DCHANGED -c ../machine 
/interrupt.cc 

g++ -g -Wall -m32 -Wshadow -I../bin -I../filesys -I../userprog -I../threads -I../machine 
-DUSER_PROGRAM -DFILESYS_NEEDED -DFILESYS_STUB -DHOST_i386 -DCHANGED -c ../machine 
/sysdep.cc 

In file included from /usr/include/c++/4.4/vector:61, 

       from ../threads/system.h:19, 

       from ../machine/sysdep.cc:77: 

/usr/include/c++/4.4/bits/stl_algobase.h:232:56: error: macro "min" passed 3 arguments, 
but takes just 2 

/usr/include/c++/4.4/bits/stl_algobase.h:253:56: error: macro "max" passed 3 arguments, 
but takes just 2 

In file included from /usr/include/c++/4.4/vector:61, 

       from ../threads/system.h:19, 

       from ../machine/sysdep.cc:77: 

/usr/include/c++/4.4/bits/stl_algobase.h:186: error: expected unqualified-id before ‘const’ 

/usr/include/c++/4.4/bits/stl_algobase.h:186: error: expected ‘)’ before ‘const’ 

/usr/include/c++/4.4/bits/stl_algobase.h:186: error: expected ‘)’ before ‘const’ 

/usr/include/c++/4.4/bits/stl_algobase.h:186: error: expected ‘)’ before ‘const’ 

/usr/include/c++/4.4/bits/stl_algobase.h:186: error: expected initializer before ‘const’ 

/usr/include/c++/4.4/bits/stl_algobase.h:209: error: expected unqualified-id before ‘const’ 

/usr/include/c++/4.4/bits/stl_algobase.h:209: error: expected ‘)’ before ‘const’ 

/usr/include/c++/4.4/bits/stl_algobase.h:209: error: expected ‘)’ before ‘const’ 

/usr/include/c++/4.4/bits/stl_algobase.h:209: error: expected ‘)’ before ‘const’ 

/usr/include/c++/4.4/bits/stl_algobase.h:209: error: expected initializer before ‘const’ 

/usr/include/c++/4.4/bits/stl_algobase.h:232: error: ‘std::min’ declared as an ‘inline’ 
variable 

/usr/include/c++/4.4/bits/stl_algobase.h:232: error: template declaration of ‘const _Tp& 
std::min’ 

/usr/include/c++/4.4/bits/stl_algobase.h:235: error: expected primary-expression before 
‘if’ 

/usr/include/c++/4.4/bits/stl_algobase.h:235: error: expected ‘}’ before ‘if’ 


/usr/include/c++/4.4/bits/stl_algobase.h:237: error: expected unqualified-id before 
‘return’ 

/usr/include/c++/4.4/bits/stl_algobase.h:253: error: ‘max’ declared as an ‘inline’ variable 

/usr/include/c++/4.4/bits/stl_algobase.h:253: error: template declaration of ‘const _Tp& 
max’ 

/usr/include/c++/4.4/bits/stl_algobase.h:256: error: expected primary-expression before 
‘if’ 

/usr/include/c++/4.4/bits/stl_algobase.h:256: error: expected ‘}’ before ‘if’ 

/usr/include/c++/4.4/bits/stl_algobase.h:258: error: expected unqualified-id before 
‘return’ 

/usr/include/c++/4.4/bits/stl_algobase.h:259: error: expected declaration before ‘}’ token 


make[1]: *** [sysdep.o] Error 1 

make[1]: Leaving directory `/home/f85/njvanbal/workspace/nachos2/userprog' 

make: *** [all] Error 2 

回答

2

总是最好看回第一误差第一;你的情况:

/usr/include/c++/4.4/bits/stl_algobase.h:232:56: error: macro "min" passed 3 arguments, 
but takes just 2 
/usr/include/c++/4.4/bits/stl_algobase.h:253:56: error: macro "max" passed 3 arguments, 
but takes just 2 

看起来你已经定义一个宏(或者函数)在自己的代码称为minmax。对于vector#include显然也定义了一个用于minmax的宏,并且编译器变得混乱。更改您的minmax宏的名称。

+3

@ user381261:宏是邪恶的。你显然听说过这个。现在你有一个证明。如果您必须使用宏,只需将它们命名为WITH_LONG_UGLY_NAMES,以尽量减少它们被定义的可能性。命名空间并不会帮助,因为宏不遵守范围......为什么人们不会盲目地遵循诸如“不要使用宏,除非必须”这样的好建议 – 2010-10-24 16:49:36

+0

我没有写这个项目,我是不允许修改这些宏所在的代码,但我将确保在将来记住您的建议。 – user381261 2010-10-24 18:20:55

+2

有人写了宏calles'min'和'max',并把它们放在你不允许修改的头文件中?这值得thedailywtf.com。 – Beta 2010-10-25 12:26:35