如
class test
{
public:
...
protected:
static const float t_sinf[360]
};
t_sinf的值都为 sinf(i);
请问如何初始化?
33 个解决方案
#1
class test
{
public:
static const float t_sinf[2];
};
const float test::t_sinf[] = {1,2};
{
public:
static const float t_sinf[2];
};
const float test::t_sinf[] = {1,2};
#2
360 个啊,
#3
类里的一般的静态数据成员,都在实现里面初始化,也就是你给成员函数实际定义的地方
不过如果是const的话,你可以在声明里面初始化,通常你还需要一个定义,并且定义不可以再初始化.
你上面的代码可以如下初始化:
上面初始化我省略了,自己定义时当然不能省略.这样一整个数组也太大了点,可以考虑用指针
不过如果是const的话,你可以在声明里面初始化,通常你还需要一个定义,并且定义不可以再初始化.
你上面的代码可以如下初始化:
float sinf[360];
for(int i=0;i<360;i++)
{
sinf[i]=sin(i);
}
class test
{
public:
...
protected:
static const float t_sinf[360]={sinf[0],sinf[1],...sinf[359]}; //class专属常量可以在声明中初始化
};
const float t_sinf[360] ; //不能再初始化
上面初始化我省略了,自己定义时当然不能省略.这样一整个数组也太大了点,可以考虑用指针
#4
class test
{
public:
static const float t_sinf[360];
};
const float test::t_sinf[] = {1,2};//后面的默认为0
360,楼主想怎么初始化呢?
{
public:
static const float t_sinf[360];
};
const float test::t_sinf[] = {1,2};//后面的默认为0
360,楼主想怎么初始化呢?
#5
打错了
const float t_sinf[360] ; //不能再初始化
上面应该是 const float test::t_sinf[360] ; //不能再初始化
const float t_sinf[360] ; //不能再初始化
上面应该是 const float test::t_sinf[360] ; //不能再初始化
#6
给你举个例子就明白了
#include<iostream>
using namespace std;
class A
{
static int a[2];
public:
static void print()
{
cout<<a[0]<<endl<<a[1]<<endl;
}
};
int A::a[2]={1,2};
int main()
{
A b;
b.print();
return 0;
}
#7
这个数组太多了,何苦要弄成const static呢,用的函数初始化不就很好吗?
#8
我想在class 中打个表啊,为了速度,所以把sin打到表中。这是不需要声明称每个对象的变量的,所以声明称static的,做成360个像3楼那样。我想会疯掉,用指针还不如定义在外面做个static,我只是想封装的好一点,想问问各位有工程经验的怎么做的。
#9
static const 只能在声明的同时初始化,并且只能是整数型的变量
#10
effective c++有说到这个问题.楼主有空可以看看.
如果是class专属常量并且是static,且为整型(int,char,bool),需特殊处理.只要不取地址,可以在声明中初始化,并且不需要定义式.
如果你取地址或者编译器坚持要看到一个定义式,可以在实现中定义,并且不能再初始化.
旧式编译器可能不支持这种在声明时赋初值的语法.这时就要在定义时赋予初值.
如果是class专属常量并且是static,且为整型(int,char,bool),需特殊处理.只要不取地址,可以在声明中初始化,并且不需要定义式.
如果你取地址或者编译器坚持要看到一个定义式,可以在实现中定义,并且不能再初始化.
旧式编译器可能不支持这种在声明时赋初值的语法.这时就要在定义时赋予初值.
#11
楼上的扯了吧,我都用过其他类型的,c++primer上还有个例子是char型的
#12
我说错了,不是楼上,是9楼
#13
10楼说的是哪一条?我手上有这本书
#14
条款02:尽量以const,enum,inline 替换#define
page 14
line 10
page 14
line 10
#15
说了等于没说。。。这个我知道,主要是量太大了的原因。
#16
我觉得你所要求的可能是无解。
你要初始化一个大数组又不想一个个赋值,那就用默认的0吧。
我想,既然想封装成一个自带了大量数据的类,那定义这些数据本来就是自己分内的事吧.
不然,这些数据就可以放在全局数据或者外部文件里面。不想破坏封装性当然只能自己定义.
象这类正弦表我觉得一般都是放在全局数据或者文件里面,类是可以使用,似乎没必要自带
你要初始化一个大数组又不想一个个赋值,那就用默认的0吧。
我想,既然想封装成一个自带了大量数据的类,那定义这些数据本来就是自己分内的事吧.
不然,这些数据就可以放在全局数据或者外部文件里面。不想破坏封装性当然只能自己定义.
象这类正弦表我觉得一般都是放在全局数据或者文件里面,类是可以使用,似乎没必要自带
#17
9楼说的对的
C++里面只允许我们对整型,和枚举类型初始化静态成员变量,
C++里面只允许我们对整型,和枚举类型初始化静态成员变量,
#18
C++里面只允许我们对整型初始化?真的假的?
c++ primer 4th 中文版 402 页有
这是错的,还是你是错的?我糊涂了
c++ primer 4th 中文版 402 页有
class Screen{
public:
//
//
Screen& clear(char = bkground);
private:
static const char bkground = '#';
};
这是错的,还是你是错的?我糊涂了
#19
float 类型必须在外面定义初始化
#20
char也是“整型”
#21
先写个小程序,自动生成你要的360个数据即可。
#22
char也是“整型”
——————————————————————————
对了,char 就是一个整数
char * 也是一个整数
——————————————————————————
对了,char 就是一个整数
char * 也是一个整数
#23
其实就是一个理解的问题,你把这个地方的整型理解成整数型,CHAR字符也是一个整数,不会是小数吧,另外还有BOOL也属于整数型
#24
class A
{
public:
static const int a = 1;
};
为什么报
error C2258: illegal pure syntax, must be '= 0'
error C2252: 'a' : pure specifier can only be specified for functions
#25
楼上用的是VC6吧,扔了换VC2005express或者wxdevcpp
#26
的确是vc6
#27
The Boolean, character, and integer types are collectively called integral types.
我们将布尔量、字符和整数类型放到一起称为整型。
--《TC++PL》
我们将布尔量、字符和整数类型放到一起称为整型。
--《TC++PL》
#28
好多东西都忘了,来这里拾起回忆哈!
#29
在声明的时候初始化
#30
const 意味着常量初始化,static 意味在构造函数定义时初始化也不行。
static const 静态常量整型数据成员可以在类中初始化,但你也不想这么做。
所以个人觉得得自己填写这些数据了。下面建议代码,请看看可行不:
static const 静态常量整型数据成员可以在类中初始化,但你也不想这么做。
所以个人觉得得自己填写这些数据了。下面建议代码,请看看可行不:
#include <math.h>
class A
{
public:
//...
static const float getSin(int index)
{
static const float t_sin[] = { sin((float)0),
sin((float)0), sin((float)2), sin((float)3),
//...
sin((float)359)};
return t_sin[index%360];
}
};
#31
可以用类的构造函数初始化,而且简单!设为私有成员。
#32
同意30楼的说法
#33
汗!我还是用了个全局函数,做了个全局变量算了。结贴,多谢各位
#1
class test
{
public:
static const float t_sinf[2];
};
const float test::t_sinf[] = {1,2};
{
public:
static const float t_sinf[2];
};
const float test::t_sinf[] = {1,2};
#2
360 个啊,
#3
类里的一般的静态数据成员,都在实现里面初始化,也就是你给成员函数实际定义的地方
不过如果是const的话,你可以在声明里面初始化,通常你还需要一个定义,并且定义不可以再初始化.
你上面的代码可以如下初始化:
上面初始化我省略了,自己定义时当然不能省略.这样一整个数组也太大了点,可以考虑用指针
不过如果是const的话,你可以在声明里面初始化,通常你还需要一个定义,并且定义不可以再初始化.
你上面的代码可以如下初始化:
float sinf[360];
for(int i=0;i<360;i++)
{
sinf[i]=sin(i);
}
class test
{
public:
...
protected:
static const float t_sinf[360]={sinf[0],sinf[1],...sinf[359]}; //class专属常量可以在声明中初始化
};
const float t_sinf[360] ; //不能再初始化
上面初始化我省略了,自己定义时当然不能省略.这样一整个数组也太大了点,可以考虑用指针
#4
class test
{
public:
static const float t_sinf[360];
};
const float test::t_sinf[] = {1,2};//后面的默认为0
360,楼主想怎么初始化呢?
{
public:
static const float t_sinf[360];
};
const float test::t_sinf[] = {1,2};//后面的默认为0
360,楼主想怎么初始化呢?
#5
打错了
const float t_sinf[360] ; //不能再初始化
上面应该是 const float test::t_sinf[360] ; //不能再初始化
const float t_sinf[360] ; //不能再初始化
上面应该是 const float test::t_sinf[360] ; //不能再初始化
#6
给你举个例子就明白了
#include<iostream>
using namespace std;
class A
{
static int a[2];
public:
static void print()
{
cout<<a[0]<<endl<<a[1]<<endl;
}
};
int A::a[2]={1,2};
int main()
{
A b;
b.print();
return 0;
}
#7
这个数组太多了,何苦要弄成const static呢,用的函数初始化不就很好吗?
#8
我想在class 中打个表啊,为了速度,所以把sin打到表中。这是不需要声明称每个对象的变量的,所以声明称static的,做成360个像3楼那样。我想会疯掉,用指针还不如定义在外面做个static,我只是想封装的好一点,想问问各位有工程经验的怎么做的。
#9
static const 只能在声明的同时初始化,并且只能是整数型的变量
#10
effective c++有说到这个问题.楼主有空可以看看.
如果是class专属常量并且是static,且为整型(int,char,bool),需特殊处理.只要不取地址,可以在声明中初始化,并且不需要定义式.
如果你取地址或者编译器坚持要看到一个定义式,可以在实现中定义,并且不能再初始化.
旧式编译器可能不支持这种在声明时赋初值的语法.这时就要在定义时赋予初值.
如果是class专属常量并且是static,且为整型(int,char,bool),需特殊处理.只要不取地址,可以在声明中初始化,并且不需要定义式.
如果你取地址或者编译器坚持要看到一个定义式,可以在实现中定义,并且不能再初始化.
旧式编译器可能不支持这种在声明时赋初值的语法.这时就要在定义时赋予初值.
#11
楼上的扯了吧,我都用过其他类型的,c++primer上还有个例子是char型的
#12
我说错了,不是楼上,是9楼
#13
10楼说的是哪一条?我手上有这本书
#14
条款02:尽量以const,enum,inline 替换#define
page 14
line 10
page 14
line 10
#15
说了等于没说。。。这个我知道,主要是量太大了的原因。
#16
我觉得你所要求的可能是无解。
你要初始化一个大数组又不想一个个赋值,那就用默认的0吧。
我想,既然想封装成一个自带了大量数据的类,那定义这些数据本来就是自己分内的事吧.
不然,这些数据就可以放在全局数据或者外部文件里面。不想破坏封装性当然只能自己定义.
象这类正弦表我觉得一般都是放在全局数据或者文件里面,类是可以使用,似乎没必要自带
你要初始化一个大数组又不想一个个赋值,那就用默认的0吧。
我想,既然想封装成一个自带了大量数据的类,那定义这些数据本来就是自己分内的事吧.
不然,这些数据就可以放在全局数据或者外部文件里面。不想破坏封装性当然只能自己定义.
象这类正弦表我觉得一般都是放在全局数据或者文件里面,类是可以使用,似乎没必要自带
#17
9楼说的对的
C++里面只允许我们对整型,和枚举类型初始化静态成员变量,
C++里面只允许我们对整型,和枚举类型初始化静态成员变量,
#18
C++里面只允许我们对整型初始化?真的假的?
c++ primer 4th 中文版 402 页有
这是错的,还是你是错的?我糊涂了
c++ primer 4th 中文版 402 页有
class Screen{
public:
//
//
Screen& clear(char = bkground);
private:
static const char bkground = '#';
};
这是错的,还是你是错的?我糊涂了
#19
float 类型必须在外面定义初始化
#20
char也是“整型”
#21
先写个小程序,自动生成你要的360个数据即可。
#22
char也是“整型”
——————————————————————————
对了,char 就是一个整数
char * 也是一个整数
——————————————————————————
对了,char 就是一个整数
char * 也是一个整数
#23
其实就是一个理解的问题,你把这个地方的整型理解成整数型,CHAR字符也是一个整数,不会是小数吧,另外还有BOOL也属于整数型
#24
class A
{
public:
static const int a = 1;
};
为什么报
error C2258: illegal pure syntax, must be '= 0'
error C2252: 'a' : pure specifier can only be specified for functions
#25
楼上用的是VC6吧,扔了换VC2005express或者wxdevcpp
#26
的确是vc6
#27
The Boolean, character, and integer types are collectively called integral types.
我们将布尔量、字符和整数类型放到一起称为整型。
--《TC++PL》
我们将布尔量、字符和整数类型放到一起称为整型。
--《TC++PL》
#28
好多东西都忘了,来这里拾起回忆哈!
#29
在声明的时候初始化
#30
const 意味着常量初始化,static 意味在构造函数定义时初始化也不行。
static const 静态常量整型数据成员可以在类中初始化,但你也不想这么做。
所以个人觉得得自己填写这些数据了。下面建议代码,请看看可行不:
static const 静态常量整型数据成员可以在类中初始化,但你也不想这么做。
所以个人觉得得自己填写这些数据了。下面建议代码,请看看可行不:
#include <math.h>
class A
{
public:
//...
static const float getSin(int index)
{
static const float t_sin[] = { sin((float)0),
sin((float)0), sin((float)2), sin((float)3),
//...
sin((float)359)};
return t_sin[index%360];
}
};
#31
可以用类的构造函数初始化,而且简单!设为私有成员。
#32
同意30楼的说法
#33
汗!我还是用了个全局函数,做了个全局变量算了。结贴,多谢各位