Visual Studio 2013在以下代码中给出了错误。当我构造对象时,它报告a1不是类/结构/联合。我不确定这段代码究竟是什么问题。似乎a2没有报告错误,a1也不应该。
如果我将鼠标移到a1上,则表示其类型为" A a1(std :: less(*)())"和a2只显示" A a2"这就是我所期待的。
任何人都对这里发生的事情有任何想法?感谢。
#include <functional>
class A {
public:
A(const std::less<int> &a) { }
void foo() { }
};
int main(int argc, char *argv[]) {
A a1(std::less<int>());
A a2 = A(std::less<int>());
a1.foo(); // Error: "left of '.foo' must have class/struct/union"
a2.foo();
return 0;
}
答案 0 :(得分:1)
,声明
A a1(std::less<int>());
作为一个函数,它将a1
作为参数并返回std::less<int>
类型的对象
强制编译器将此视为A
的变量定义,使用:
a1
答案 1 :(得分:0)
本声明
A a1(std::less<int>());
是一个函数声明,其返回类型为A
,参数类型为std::less<int>().
而是写入
A a1 { std::less<int>() };
或
A a1( ( std::less<int>() ) );