具有相同类型名称的成员
Member with the same name of the type
我想创建一个与返回类型同名的成员函数。示例:
class A { };
class B {
public:
A& A() { return *a; }
private:
A* a;
};
然而,编译器不允许我这样做。我试图将成员返回类型的类型更改为::A
(正如这里所建议的,但没有成功。我知道我可以只更改成员名称,但我只想了解为什么它有这个限制,以及我的解决方法。
如果声明一个名为A
的成员,则在没有显式命名空间的情况下不能再使用类型A
。您需要将每次出现的类型A更改为::A
。
更正后的代码看起来像:
class A { };
class B {
public:
::A& A() { return *a; }
private:
::A* a;
};
修复了代码板上的代码:
http://codepad.org/cilF9rKm
这是因为与类同名的成员是构造函数。但是,您试图用类型声明一个,这是一个错误。只能按照语言的要求定义构造函数(没有显式返回类型)。
例如,如果你在B
中有一个方法说
A x = A();
无论您是在调用B::A()
还是在构造一个新的a对象,都是不明确的。
相关文章:
- c++类声明时,相同的例程,不同的成员变量类型
- 是否可以根据其数据成员的类型确定类型的大小
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- 无法推断模板化类成员的类型
- static_assert私有类成员的类型,没有实例
- 在运行时选择类成员的类型
- 继承类中的 C++ 成员变量类型重写
- 拒绝包含某些公共静态数据成员的类型
- 如何进行编译时type_check并且仅在类成员的类型与类型匹配时才编译类的一部分?
- 如何在不创建实例的情况下获取类的方法成员的类型?
- 类成员的类型定义
- 如何根据参数化类型的特定成员的类型对模板类函数进行不同的实现
- 具有依赖于实现的成员函数类型的多个静态接口
- 位字段成员的类型
- 根据参数设置构造函数的成员数据类型
- 指向成员非类型模板参数的指针的实际用法
- 如何与可以在列表/向量中使用的成员进行类型的类型
- 访问联合成员需要类型转换
- 基于继承类模板更改基类成员的类型签名
- 如何重写基类成员的类型