gpt4 book ai didi

C++ 编译器错误 C2751 - 究竟是什么原因造成的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:14:57 25 4
gpt4 key购买 nike

我正在与 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': 无法限定函数参数的名称

为什么我不能为 b2 显式调用构造函数?

最佳答案

这是most vexing parse的问题.在 clang 下编译给出了完整的诊断:

<source>:18:17: error: parameter declarator cannot be qualified
B b2 (B (A::giveA ())); // C2751
~~~^

<source>:18:10: warning: parentheses were disambiguated as a function declaration [-Wvexing-parse]
B b2 (B (A::giveA ())); // C2751
^~~~~~~~~~~~~~~~~

<source>:18:11: note: add a pair of parentheses to declare a variable
B b2 (B (A::giveA ())); // C2751
^
( )
1 warning and 1 error generated.
Compiler exited with result code 1

按照编译器的建议进行修复:

B b2 ((B (A::giveA ()))); // no error 

关于C++ 编译器错误 C2751 - 究竟是什么原因造成的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44045257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com