2如果能,那在构造函数中似乎不能对数组成员进行初始化,因为编译时说不能用“[”
3构造函数是否应当对头文件当中的变量都一一初始化,且要对应头文件中定义的顺序初始化?
4如果我没在头文件中定义数组,而在.cpp文件中定义,编译时会说是没有定义这个数组。。。。
5怎么办怎么办。。。。
13 个解决方案
#1
可以在头文件里定义 但是不能在头文件里申明。你可以在构造函数里面进行初始化。
例如:
.h
char m_buf[100];
.cpp
class A::A() //构造函数
{
memset(m_buf,0,100);
}
例如:
.h
char m_buf[100];
.cpp
class A::A() //构造函数
{
memset(m_buf,0,100);
}
#2
数组可以在头文件中定义。
定义后也能对数组成员进行初始化。
定义后也能对数组成员进行初始化。
#3
demo.h 头文件:
demo.cpp 文件:
#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
明白,谢谢楼上的几位!。。。。。那是不是头文件中的变量都要全部初始化?
#7
一般只在头文件声明变量,在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;
}
.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;
}
.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
为什么我仿照你的办法,最后会提示““memset”: 找不到标识符”?
#13
memset未定义。你有必要using namespace std;
#1
可以在头文件里定义 但是不能在头文件里申明。你可以在构造函数里面进行初始化。
例如:
.h
char m_buf[100];
.cpp
class A::A() //构造函数
{
memset(m_buf,0,100);
}
例如:
.h
char m_buf[100];
.cpp
class A::A() //构造函数
{
memset(m_buf,0,100);
}
#2
数组可以在头文件中定义。
定义后也能对数组成员进行初始化。
定义后也能对数组成员进行初始化。
#3
demo.h 头文件:
demo.cpp 文件:
#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
#7
一般只在头文件声明变量,在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;
}
.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;
}
.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
为什么我仿照你的办法,最后会提示““memset”: 找不到标识符”?
#13
memset未定义。你有必要using namespace std;