我不确定我什至需要使用哪些搜索词来找到该问题的答案,因此,如果重复出现该问题,我们深表歉意。基本上,为什么要编译?
struct A {
A(){};
A(const char*){};
};
int main() {
//const char* b = "what is going on?";
A(b);
return 0;
}
但这不是吗?
struct A {
A(){};
A(const char*){};
};
int main() {
const char* b = "what is going on?";
A(b);
return 0;
}
test.cpp: In function ‘int main()’:
test.cpp:8: error: conflicting declaration ‘A b’
test.cpp:7: error: ‘b’ has a previous declaration as ‘const char* b’
c ++的哪些功能导致这种歧义?
这样做的主要目的是在类型A的堆栈上创建一个匿名变量。类似于A a(b);
,但不命名a。
答案 0 :(得分:5)
这是由C ++语法中的歧义引起的。 A(b);
被解析为b
的定义,A
是类型A{b};
的对象。此确切问题在[stmt.ambig]中进行了描述。
要解决此问题,请使用统一初始化(A(b));
或将其括在括号中以使其强制为表达式而不是声明session_settings
。两种修复方法都可以使您的程序得以编译。