您好我第一次创建头文件并在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。作为初学者,我需要在这种情况下提供指导。请指导我删除警告。谢谢。
答案 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;
您不必在类成员中使用完全限定名称。编译器仍然理解你的意思是成员变量。