Brixpath::Brixpath(){
{ _animationOptions = (AnimationOptions){5, 3, 40, 30};
};
当我运行此代码块VS给出错误
在AnimationOptions上不允许使用typename。
当我删除typename
时Brixpath::Brixpath(){
{ _animationOptions = {5, 3, 40, 30};
};
VS2010在第2行的第一个“{”处给出错误
错误:预期表达式
动画选项的定义是 -
struct AnimationOptions {
int maxClicks; //how many clicks animation on screen to support
int step; // animation speed, 3 pixels per time
int limit; //width of animation rectangle. if more, rectangle dissapears
int distance; //minimum distance between previous click and current
};
如何解决此错误?请帮忙。
答案 0 :(得分:2)
这可行,并且是首选选项(需要C ++ 11):
Brixpath::Brixpath() : _animationOptions{5, 3, 40, 30}
{
};
在这里,您在构造函数初始化列表中初始化 _animationOptions
,而不是在构造函数体中为其分配值。
在没有C ++ 11支持的情况下,你可以给AnimationOptions
一个构造函数,在这种情况下它不再是POD,或者逐个元素地设置。如果这是一个问题,您还可以创建初始化函数:
AnimationOptions make_ao(int clicks, int step, int limit, int distance)
{
AnimationOptions ao;
ao.maxClicks = clicks;
ao.step = step;
....
return ao;
};
然后
Brixpath::Brixpath() : _animationOptions(make_ao(5, 3, 40, 30))
{
};
这将AnimationOptions
保留为POD,并将初始化与构造函数代码分离。
答案 1 :(得分:2)
鉴于VS 2010的用户(即,您不能使用C ++ 11统一初始化),您可能希望在结构中添加构造函数,然后使用它来初始化结构:
struct AnimationOptions {
int maxClicks; //how many clicks animation on screen to support
int step; // animation speed, 3 pixels per time
int limit; //width of animation rectangle. if more, rectangle dissapears
int distance; //minimum distance between previous click and current
AnimationOptions(int maxClicks, int step, int limit, int distance) :
maxClicks(maxClicks), step(step), limit(limit), distance(distance) {}
};
Brixpath::Brixpath() : _animationOptions(5, 3, 40, 30) {}
如果你需要将AnimationOptions维护为POD,我相信你可以通过支持初始化而不是成员初始化来简化代码:
AnimationOptions make_ao(int clicks, int step, int limit, int distance)
{
AnimationOptions ao = {clicks, step, limit, distance};
return ao;
};
答案 2 :(得分:0)
如何解决此错误?
使用c ++ 11标准选项编译代码,或者成员初始化struct:
Brixpath::Brixpath()
{
_animationOptions.maxClicks = 5;
_animationOptions.step = 3;
_animationOptions.limit = 40
_animationOptions.distance = 30;
};