inject -class-name表示不完整和完整类型
Injected-class-name denoted incomplete and complete type
考虑以下代码片段:
class A
{
void foo(){ A a; }//1. Ok, because A is complete type here
int b[A::c];//2. Error, because incomplete type denoted by A does not contain c as a member.
static const int c = 6;
}
关于这种行为,我假设//1
和//2
中的A实际上指的是不同的实体。但在A
的名称查找过程中(3.4.1,非限定名称查找),//1
和//2
都可以找到相同的注入类名称。这很奇怪。
你能解释一下吗?
我想从标准中找到一个规范的参考
dyp已经在评论区给出了正确的答案。引用自标准:
类类型(如"
class X
")可能在翻译单元的某个点不完整,然后完成;类型"class X
";在两个点都是相同的类型。[…]
这是[basic.types]。尽管自c++ 98以来措辞没有改变,但c++ 20中的general]/6。这是OP要求的标准引用。
OP接着问:
但是//1和//2处的完整和不完整类类型包含不同的成员。我不明白这些类型怎么可能是一样的?
它们在身份方面是相同的,就像一个有两条胳膊和两条腿的人,如果他不幸失去了一条胳膊,那么他后来还是同一个人。
相关文章:
- '{'标记之前的预期类名,然后在预声明时无效使用不完整的类型'class class_name'
- C++错误:"class name"之前的预期类型说明符
- C++ 中的类之间的数据重新循环 - 错误:'<class name>'未在此范围内声明
- 无效使用不完整的类型"class..."
- 错误:"class name"不命名类型
- 无效使用不完整的类型"class"
- 错误:返回类型 'class Polar' 不完整,无效使用类型 'polar'
- 无效使用不完整的类型'class QGraphicsRectItem'
- 无效使用不完整的类型'class...'
- 通过在每个元素上调用名称(),将类的向量转换为clangtype(class :: name())的向量
- 什么是类型*volatile*name=value
- C++:除虚函数外," undefined reference to 'typeinfo for [class name]' "的原因是什么
- 错误:请求“y”中的成员“x”,该成员属于非类类型“class**”
- 我们如何在 c++ 中以朋友声明"friend elaborated-class-name ;"为例?
- 我收到错误"无效使用不完整的类型'class map'
- VS2010 - 如何解决"XXX is a reserved class name"错误
- C++嵌套继承错误"expected class-name before ‘{’ token"
- 什么是Windows 'class name'开发的应用程序的?
- inject -class-name表示不完整和完整类型
- 错误:'class name'重新声明为不同类型的符号?