为什么在对象表达式的上下文中找不到我的构造函数
Why is my constructor unable to be found in the context of an object expression?
代码示例:
#include<iostream>
struct A
{
int a;
A(){ a = 5; }
};
int main()
{
A *a = new A();
std::cout << a->A;//A is injected-class-name
}
为什么会找到注入的类名而不是构造函数?此外,即使我们编写以下内容,我们也不能调用构造函数:
#include<iostream>
struct A
{
int a;
A(){ a = 5; }
};
int main()
{
A *a = new A();
std::cout << a->A::A//A::A denote injected-class-name
}
尽管如此,3.4.3.1/1说:
在函数名不被忽略并且嵌套名称说明符指定类C:——如果指定的名称在嵌套的名称说明符之后,当在C中查找时,是C的注入类名(第9条(,或者[…]被认为是命名C类的构造函数。
在名称查找期间的对象表达式中,后面跟在->
之后,函数不会被忽略。
那么,为什么在这种情况下找不到构造函数呢?
我真的不能说它比标准更好:
12.1建设者[class.ctor]
构造函数没有名称。使用特殊的声明符语法来声明或定义构造函数。
在您的代码中,A
不是函数的名称。
那么,为什么在这种情况下找不到构造函数呢?
阅读您的报价:
如果在嵌套名称说明符[…].之后指定的名称
嵌套的名称说明符在末尾包含一个::
(作用域解析运算符(。你在a->A
中看到::
了吗?
相关文章:
- CMake:在其他目录中找不到我的头文件
- 为什么在qt c++中找不到我的插槽?
- 我在 c++ 中的 AES 代码有问题。明文正在更改,但加密邮件是相同的。我找不到我的错误
- 为什么找不到我的着色器属性?
- Visual Studio 测试资源管理器找不到我的提升测试
- 为什么 Tensorflow 找不到我的自定义操作的 GPU 内核?
- Android找不到我的JNI原生库函数
- 找不到我的内存泄漏
- 制作找不到我的 .so.2.4.8 文件
- 为什么 UMDH 找不到我的符号?我可以在没有它们的情况下解释堆栈跟踪吗?
- 为什么ValGrind找不到我的符号?
- 模板定义找不到我的函数
- 将十进制转换为十六进制,找不到我的逻辑错误
- Xcode调试器找不到我的文件
- 为什么LLDB>v320.4.160再也找不到我的源文件了?
- Netbeans 8.1(适用于 C/C++)找不到我的编译器(gcc-6.0.0 开发版本)
- 为什么编译器找不到我的头文件?
- 即使我修改了LD_LIBRARY_PATH,也找不到我的共享库
- windbg 和 VS 找不到我的 pdb 文件
- G++ 找不到我的库