如何访问类中的全局数据成员和成员函数
How Access of global data member and member function in a class?
我已经声明了一个全局数据和全局函数,当我试图在类编译器中访问抛出错误为"我不能出现在常量表达式",为什么?
#include<iostream>
using namespace std;
int i=20;
void fn()
{
cout<<" I am outside class"<<endl;
}
class a
{
public:
int x= ::i; // error is i cannot appear in constant expression
void accessGlobal()
{
::fn(); //fn() is being called
}
};
int main()
{
a obj;
obj.accessGlobal();
}
您的问题与全局变量无关,而是与类成员初始化有关。
你想用x
做的是类内成员初始化,从c++ 11开始,标准节§12.6.2:
在非委托构造函数中,如果给定的非静态数据成员或基类不是由mem-initializer-id指定的(包括没有初始化列表的情况,因为构造函数没有初始化器)并且实体不是的虚拟基类抽象类(10.4),然后
- 如果实体是具有大括号或等号初始化式的非静态数据成员,则该实体按照8.5;
解决方案:
- 使用c++11编译器并添加对c++11的支持(-std=c++11)。
- 如果你真的不能,就像往常一样,提供一个构造函数来初始化你的成员:
例子:
a() : x(::i) {}
您需要使用c++ 11标准来编译此代码,在以前的标准中禁止在类的定义内部定义非静态变量(类的构造函数应该这样做)。按照旧的标准,您还可以尝试在变量声明之前添加static
关键字,并在类定义之后初始化它:
class a {
public:
static int x;
};
int a::x = ::i;
相关文章:
- 用于访问容器<T>数据成员的正确 API
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 数据成员SFINAE的C++17测试:gcc vs clang
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 如何在c++中定义以struct为数据成员的类中的构造函数
- 静态数据成员模板专用化的实例化点在哪里
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 使用指针访问数组中的对象数据成员
- 友元函数无法访问私有数据成员 (c++)
- 我可以在 C++ 中将数据成员/变量从其定义之外添加到结构中吗?
- 为什么将一个结构的引用设置为等于另一个结构只会更改一个数据成员?
- 将私有数据成员添加到野牛生成的类中
- 输入数据成员未按要求工作
- 二维矢量数据成员
- 在类 A 中创建类型为 B 类的向量 - 访问数据 [C++] [成员在两个类中都是私有的]
- 调用在 HXX 文件中声明的静态数据成员
- 使用全局命名空间限定符和指向数据成员的指针
- c++全局函数与根据内存的数据成员函数
- C++:为什么与访问全局变量相比,访问类数据成员如此缓慢
- 如何访问类中的全局数据成员和成员函数