【发布时间】:2017-05-18 10:28:20
【问题描述】:
我正在与C2751 编译器错误作斗争,但不太明白究竟是什么原因造成的。以下小代码会产生错误:
#include <iostream>
class A {
public:
A () { std::cout << "A constructed" << std::endl; };
static A giveA () { return A (); }
};
class B {
public:
B (const A& a) { std::cout << "B constructed" << std::endl; }
};
int main () {
B b1 = B (A::giveA ()); // works
B b2 (B (A::giveA ())); // C2751
B b3 (A::giveA ()); // works
}
编译器输出:
consoleapplication1.cpp(21): error C2751: 'A::giveA': the name of a function parameter cannot be qualified
为什么我不能为b2 显式调用构造函数?
【问题讨论】:
-
你使用什么编译器?因为 gcc 5.4 使用代码构建没有任何问题。
-
@knst 他正在使用 MSVC(参见 C2751 链接)
-
@knst 它也不能用clang 编译。
-
从消息中,VC++ 认为你在声明一个函数;这是通常令人烦恼的解析问题的一些变体。随意添加括号,它应该会消失。
-
这种问题,当你发现原因时,会让你脸色难看
标签: c++ visual-c++ constructor function-parameter