- 主题:一个构造函数的问题
贴你没编译过去的完整代码,贴上来的,和你本地喂给编译器的,不要有任何的不一致。这都是沟通成本。
【 在 GoGoRoger 的大作中提到: 】
: 我在本地,将引用传递改为了值传递,也是编译不过的,不知道你们怎么pass的。。。。
:
--
FROM 114.245.195.*
// constructing priority queues
#include <iostream> // std::cout
#include <queue> // std::priority_queue
#include <vector> // std::vector
#include <functional> // std::greater
class mycomparison
{
bool reverse;
public:
mycomparison(const bool& revparam=false)
{reverse=revparam;}
bool operator() (const int& lhs, const int&rhs) const
{
if (reverse) return (lhs>rhs);
else return (lhs<rhs);
}
};
int main ()
{
int myints[]= {10,60,50,20};
std::priority_queue<int> first;
std::priority_queue<int> second (myints,myints+4);
std::priority_queue<int, std::vector<int>, std::greater<int> >
third (myints,myints+4);
// using mycomparison:
typedef std::priority_queue<int,std::vector<int>,mycomparison> mypq_type;
mypq_type fourth; // less-than comparison
fourth.push(0);
mypq_type fifth(mycomparison()); // greater-than comparison
fifth.push(1);
std::cout << fifth.top() << std::endl;
return 0;
}
--
FROM 222.129.50.*
改成花括号能编过去
mypq_type fifth{mycomparison()}; // greater-than comparison
【 在 GoGoRoger 的大作中提到: 】
: // constructing priority queues
: #include <iostream> // std::cout
: #include <queue> // std::priority_queue
: ...................
--
FROM 114.245.195.*
嗯,我也是这么想的,但是还是说明编译器理解有问题吧?
【 在 cybereagle 的大作中提到: 】
: 看错误信息啊
: 在这个地方 mycomparison() 会被当成一个函数指针 mycomparison (*)()
: 用mycomparison{} 可以
--
FROM 222.129.50.*
这是一个著名的问题,有个专门的名字叫 most vexing parsing
Effective STL 第六节 和 Effective Modern CPP 第七节里都提到过。
我记得Effective CPP里也有提到,但是搜vex没找到。—— 买本Effective的书吧,能看10年。
【 在 GoGoRoger 的大作中提到: 】
: 嗯,我也是这么想的,但是还是说明编译器理解有问题吧?
:
--
FROM 61.185.186.*
版上前一阵还争论了是否优先用{}初始化
【 在 DoorWay 的大作中提到: 】
: 这是一个著名的问题,有个专门的名字叫 most vexing parsing
: Effective STL 第六节 和 Effective Modern CPP 第七节里都提到过。
: 我记得Effective CPP里也有提到,但是搜vex没找到。—— 买本Effective的书吧,能看10年。
: ...................
--
FROM 114.245.195.*
关键是构造成功了,却在push的时候出错,而且提示极不可读,太复杂了。
【 在 DoorWay 的大作中提到: 】
: 这是一个著名的问题,有个专门的名字叫 most vexing parsing
:
: Effective STL 第六节 和 Effective Modern CPP 第七节里都提到过。
: ...................
--
修改:GoGoRoger FROM 222.129.50.*
FROM 222.129.50.*
把push、top的删掉,只保留定义的那行,VC是有警告的
【 在 GoGoRoger 的大作中提到: 】
: 关键是构造成功了,却在push的时候出错,而且提示极不可读,太复杂了。
--
修改:z16166 FROM 114.245.195.*
FROM 114.245.195.*