1 数组能不能在头文件中定义?

时间:2021-04-01 12:46:31
1 数组能不能在头文件中定义?

2如果能,那在构造函数中似乎不能对数组成员进行初始化,因为编译时说不能用“[”

3构造函数是否应当对头文件当中的变量都一一初始化,且要对应头文件中定义的顺序初始化?

4如果我没在头文件中定义数组,而在.cpp文件中定义,编译时会说是没有定义这个数组。。。。

5怎么办怎么办。。。。

13 个解决方案

#1


可以在头文件里定义 但是不能在头文件里申明。你可以在构造函数里面进行初始化。
例如:
.h
char m_buf[100];
.cpp
class A::A() //构造函数

       memset(m_buf,0,100);

#2


数组可以在头文件中定义。
定义后也能对数组成员进行初始化。

#3


demo.h 头文件:

#pragma once

class CDemo
{
private:
char _data[1024];

public:
CDemo(void);
~CDemo(void);
};



demo.cpp 文件:

#include "StdAfx.h"
#include "Demo.h"
#include <stdio.h>
#include <string>

CDemo::CDemo(void)
{
memset(_data, 0, sizeof(_data));
sprintf_s(_data, sizeof(_data), "%s", "1234567890");
}

CDemo::~CDemo(void)
{
}

#4



//给个简单的例子一看就知道了
//head.h 头文件
class  student
{
    public:
          student();
          void show();
    private:
         char name[20];  //定义数组
         char number[12];
         int age;
};
//main.cpp文件

#include <iostream>
#include <cstring>
#include "head.h"
using namespace std;

student::student()
{
    // 没有按照顺序初始化
    age = 10;
    strcpy(name,"zhang san");
    strcpy(number,"20101402");
}

void student::show()
{
    cout<<name<<"  "<<number<<"  "<<age<<endl;
}
int main()
{
    student stu;
    stu.show();
    return 0;
}

#5


明白,谢谢楼上的几位!。。。。。那是不是头文件中的变量都要全部初始化?

#6


http://blog.csdn.net/hairetz/archive/2009/10/10/4649320.aspx

楼主最好稍微了解一下.h和.cpp文件的区别

#7


引用 5 楼 zxf3206122 的回复:
明白,谢谢楼上的几位!。。。。。那是不是头文件中的变量都要全部初始化?


一般只在头文件声明变量,在cpp文件定义变量。

#8




A.h

class A  
{
public:
int i;
int j;
int k;
//1 数组能不能在头文件中定义?
char ch[20];
public:
A();
virtual ~A();

};



A.cpp

#include "A.h"
#include <string.h>
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
//4如果我没在头文件中定义数组,而在.cpp文件中定义,编译时会说是没有定义这个数组。。。。
char aa[10];

A::A()
{

}

A::~A()
{
memset(ch,0,20);
//2如果能,那在构造函数中似乎不能对数组成员进行初始化,因为编译时说不能用“[”
ch[1]='a';
3构造函数是否应当对头文件当中的变量都一一初始化,且要对应头文件中定义的顺序初始化?
j = 0;
i = 10;
}


以上都可以编译连接通过!对于楼主的问题!

希望楼主能够把自己写的源代码贴出来!

#9


不建议在.h文件里 定义数组,但可以 声明为外部数组变量:
.h
extern int A[100];
extern void f1(int,int);
extern void Out();
1.c:
 int A[100]={0};
void f1(int N,int set)
{
 for (int i=0;i<N;++i)
   A[i]=set;
}
2.c:
 void Out()
{
  for(int i=0;i<100;++i){
    print("%04d  ",A[i]);
    if(!(i+1)%10)printf("\n");}
}
3.c:
int B[100]={0}
void In(int a[];int N)
{
  for(int i=0;i<N;++i)
    scanf("%d ",&(a[i]));
}
void cp(int a[100],int b[100])
{
   for(int i=0;i<100;++i)a[i]=b[i];
}

int main()
{
  In(B,100);
  Out();
  f1(100,20);
  Out();
  cp(A,B);
  Out();
  return 0;
}

#10


对于struct/class来说,在.h的struct/class内定义数组是可以的,但是不能简单初始化,必须通过构造函数或初始化函数实现
.h:
class T{
  int A[100];
  void init(int set);
  bool inited;
public:
  T(int n=0){inited = false;init(n);}
  ...
}
.cpp
void T::init(int set)
{
  for(int i=0;i<100;++i)
    A[i]=set;
  inited = true;
}

#11


为什么我仿照你的办法,最后会提示““memset”: 找不到标识符”?

#12


引用 3 楼 cgfhz 的回复:
demo.h 头文件:

C/C++ code

#pragma once

class CDemo
{
private:
    char    _data[1024];

public:
    CDemo(void);
    ~CDemo(void);
};




demo.cpp 文件:

C/C++ code

#include "Std……

为什么我仿照你的办法,最后会提示““memset”: 找不到标识符”?

#13


memset未定义。你有必要using namespace std;

#1


可以在头文件里定义 但是不能在头文件里申明。你可以在构造函数里面进行初始化。
例如:
.h
char m_buf[100];
.cpp
class A::A() //构造函数

       memset(m_buf,0,100);

#2


数组可以在头文件中定义。
定义后也能对数组成员进行初始化。

#3


demo.h 头文件:

#pragma once

class CDemo
{
private:
char _data[1024];

public:
CDemo(void);
~CDemo(void);
};



demo.cpp 文件:

#include "StdAfx.h"
#include "Demo.h"
#include <stdio.h>
#include <string>

CDemo::CDemo(void)
{
memset(_data, 0, sizeof(_data));
sprintf_s(_data, sizeof(_data), "%s", "1234567890");
}

CDemo::~CDemo(void)
{
}

#4



//给个简单的例子一看就知道了
//head.h 头文件
class  student
{
    public:
          student();
          void show();
    private:
         char name[20];  //定义数组
         char number[12];
         int age;
};
//main.cpp文件

#include <iostream>
#include <cstring>
#include "head.h"
using namespace std;

student::student()
{
    // 没有按照顺序初始化
    age = 10;
    strcpy(name,"zhang san");
    strcpy(number,"20101402");
}

void student::show()
{
    cout<<name<<"  "<<number<<"  "<<age<<endl;
}
int main()
{
    student stu;
    stu.show();
    return 0;
}

#5


明白,谢谢楼上的几位!。。。。。那是不是头文件中的变量都要全部初始化?

#6


http://blog.csdn.net/hairetz/archive/2009/10/10/4649320.aspx

楼主最好稍微了解一下.h和.cpp文件的区别

#7


引用 5 楼 zxf3206122 的回复:
明白,谢谢楼上的几位!。。。。。那是不是头文件中的变量都要全部初始化?


一般只在头文件声明变量,在cpp文件定义变量。

#8




A.h

class A  
{
public:
int i;
int j;
int k;
//1 数组能不能在头文件中定义?
char ch[20];
public:
A();
virtual ~A();

};



A.cpp

#include "A.h"
#include <string.h>
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
//4如果我没在头文件中定义数组,而在.cpp文件中定义,编译时会说是没有定义这个数组。。。。
char aa[10];

A::A()
{

}

A::~A()
{
memset(ch,0,20);
//2如果能,那在构造函数中似乎不能对数组成员进行初始化,因为编译时说不能用“[”
ch[1]='a';
3构造函数是否应当对头文件当中的变量都一一初始化,且要对应头文件中定义的顺序初始化?
j = 0;
i = 10;
}


以上都可以编译连接通过!对于楼主的问题!

希望楼主能够把自己写的源代码贴出来!

#9


不建议在.h文件里 定义数组,但可以 声明为外部数组变量:
.h
extern int A[100];
extern void f1(int,int);
extern void Out();
1.c:
 int A[100]={0};
void f1(int N,int set)
{
 for (int i=0;i<N;++i)
   A[i]=set;
}
2.c:
 void Out()
{
  for(int i=0;i<100;++i){
    print("%04d  ",A[i]);
    if(!(i+1)%10)printf("\n");}
}
3.c:
int B[100]={0}
void In(int a[];int N)
{
  for(int i=0;i<N;++i)
    scanf("%d ",&(a[i]));
}
void cp(int a[100],int b[100])
{
   for(int i=0;i<100;++i)a[i]=b[i];
}

int main()
{
  In(B,100);
  Out();
  f1(100,20);
  Out();
  cp(A,B);
  Out();
  return 0;
}

#10


对于struct/class来说,在.h的struct/class内定义数组是可以的,但是不能简单初始化,必须通过构造函数或初始化函数实现
.h:
class T{
  int A[100];
  void init(int set);
  bool inited;
public:
  T(int n=0){inited = false;init(n);}
  ...
}
.cpp
void T::init(int set)
{
  for(int i=0;i<100;++i)
    A[i]=set;
  inited = true;
}

#11


为什么我仿照你的办法,最后会提示““memset”: 找不到标识符”?

#12


引用 3 楼 cgfhz 的回复:
demo.h 头文件:

C/C++ code

#pragma once

class CDemo
{
private:
    char    _data[1024];

public:
    CDemo(void);
    ~CDemo(void);
};




demo.cpp 文件:

C/C++ code

#include "Std……

为什么我仿照你的办法,最后会提示““memset”: 找不到标识符”?

#13


memset未定义。你有必要using namespace std;