链接矢量类的问题

时间:2010-10-24 16:27:02

标签: c++ makefile gnu

我有一个包含大量c代码和一些c ++代码的.cc文件的大项目。我想在这个程序中使用一个向量,因为我需要一个很容易制作2d的无界数据类型(换句话说我不想使用数组或列表)。 问题是当我在包含矢量类之后运行我的make时,我得到了之前没有得到的错误。唯一可以产生差异的是#include <vector>。我没有编写make文件(并且大约有4或5个),但据我所知,它使用的是GNU编译器。我没有实例化的矢量对象,已经包含using namespace std;,当我注释掉vector的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

1 个答案:

答案 0 :(得分: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的宏(或可能是一个函数)。 #include的{​​{1}}显然也为vectormin定义了一个宏,编译器也感到困惑。更改maxmin宏的名称。