如何从cpp中包含的头文件中访问变量?

时间:2018-04-18 07:18:01

标签: c++

您好我第一次创建头文件并在cpp中访问其变量。我有2个文件arrayyy.h和array.cpp,它们的代码如下所示。

arrayyy.h

#ifndef ARRAYYY_H_
#define ARRAYYY_H_

namespace a {

class arrayyy {
public:
    arrayyy();
    virtual ~arrayyy();
private:
    const static int num = 4;
    int* arr = new int[num];
};

} /* namespace a */

#endif /* ARRAYYY_H_ */

arrayyy.cpp

#include "arrayyy.h"
#include "iostream"
using namespace std;

namespace a {

arrayyy::arrayyy() {


    cout << a::arrayyy::num ;

    a::arrayyy::arr = {8,2,9,4};

    for(int i =0; i < a::arrayyy::num; i++)
    {
        cout << arr;
    }
}

arrayyy::~arrayyy() {

}
//int main ()
//{
//  cout << a::arrayyy::num ;
//}

} /* namespace a */

而不是获取输出CTD构建控制台显示以下警告

12:28:10 **** Incremental Build of configuration Debug for project TRiES ****
make all 
Building file: ../src/arrayyy.cpp
Invoking: Cross G++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/arrayyy.d" -MT"src/arrayyy.o" -o "src/arrayyy.o" "../src/arrayyy.cpp"
In file included from ../src/arrayyy.cpp:8:0:
../src/arrayyy.h:19:24: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11
  int* arr = new int[num];
                        ^
../src/arrayyy.cpp: In constructor ‘a::arrayyy::arrayyy()’:
../src/arrayyy.cpp:19:28: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11
  a::arrayyy::arr = {8,2,9,4};
                            ^
../src/arrayyy.cpp:19:18: error: cannot convert ‘<brace-enclosed initializer list>’ to ‘int*’ in assignment
  a::arrayyy::arr = {8,2,9,4};
                  ^
src/subdir.mk:18: recipe for target 'src/arrayyy.o' failed
make: *** [src/arrayyy.o] Error 1

12:28:10 Build Finished (took 417ms)

我已经检查过已经问过的问题,但他们的答案对我没有帮助。我也使用过extern。作为初学者,我需要在这种情况下提供指导。请指导我删除警告。谢谢。

1 个答案:

答案 0 :(得分:1)

这里有两个问题。第一个已由编译器解决:

  

../ src / arrayyy.h:19:24:警告:非静态数据成员初始值设定项仅适用于-std = c ++ 11或-std = gnu ++ 11

int* arr = new int[num];

此功能已添加到C ++ 11标准中的语言中。因此,为了能够在类声明中初始化类成员,需要将选项-std=c++11添加到编译选项中。

另一部分是关于这一行:

a::arrayyy::arr = {8,2,9,4};

这不是你可以在C ++中做的事情。成员arr是指向某些int的指针。没有简单的方法可以在一个语句中分配一大堆这些int。您必须单独执行此操作:

arr[0] = 8;
arr[1] = 2;
arr[2] = 9;
arr[3] = 4;

您不必在类成员中使用完全限定名称。编译器仍然理解你的意思是成员变量。