C++ 来自stl的队列
我正在尝试使用g++4.2.1编译以下代码,并收到以下错误 代码:C++ 来自stl的队列,c++,stl,g++,standard-library,C++,Stl,G++,Standard Library,我正在尝试使用g++4.2.1编译以下代码,并收到以下错误 代码: #包括 #包括 使用名称空间std; int main(int argc,char*const argv[] { 队列myqueue(); 对于(int i=0;i FooBar = FoeWe(;)/和 FooBar = FoO(a,b,c);< /Cord>。但是我也不太喜欢这个……所以Foo Bar();不调用构造函数Fo::Foe:()?如果它产生编译错误,则不能使用。 void f() { List x;
#包括
#包括
使用名称空间std;
int main(int argc,char*const argv[]
{
队列myqueue();
对于(int i=0;i<10;i++)
myqueue.push(i);
cout
列表x;
和列表x();
之间有什么区别吗?
大不一样
假设List
是某个类的名称。然后函数f()
声明一个名为x
的本地List
对象:
void f()
{
List x; // Local object named x (of class List)
...
}
但是函数g()
声明了一个名为x()
的函数,该函数返回一个列表
:
void g()
{
List x(); // Function named x (that returns a List)
...
}
将queue myqueue();
替换为queue myqueue;
,您会没事的。如果需要进一步研究,这有时也被称为“最麻烦的解析”:成功了!非常感谢。出于好奇,队列中没有构造函数吗?我有括号是因为我必须调用构造函数。或者我只有在新调用对象时才会这样做吗?没有括号的版本会调用无参数构造函数。Foo-bar;
constructsbar
使用构造函数Foo::Foo()
Foo-bar(a,b,c);
使用构造函数Foo::Foo(a,b,c)
构造bar
,
新Foo;和新Foo()两个都构造了<代码> Foo,但是这是不一致的,可怕的。这是C++的:这是为什么有些人喜欢写代码> FooBar = FoeWe(;)/<代码>和<代码> FooBar = FoO(a,b,c);< /Cord>。但是我也不太喜欢这个……所以Foo Bar();不调用构造函数Fo::Foe:()?如果它产生编译错误,则不能使用。
void f()
{
List x; // Local object named x (of class List)
...
}
void g()
{
List x(); // Function named x (that returns a List)
...
}