0
Brixpath::Brixpath(){
{    _animationOptions = (AnimationOptions){5, 3, 40, 30}; 
};

当我运行这个代码块 VS 给出错误

AnimationOptions 上不允许使用 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
};

我该如何解决这个错误?请帮忙。

4

3 回答 3

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,并将初始化与构造函数代码分离。

于 2013-07-31T06:19:09.963 回答
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;
};
于 2013-07-31T06:26:13.200 回答
0

我该如何解决这个错误?

使用 c++11 标准选项编译代码,或按成员初始化结构:

Brixpath::Brixpath()
{    
    _animationOptions.maxClicks = 5;
    _animationOptions.step = 3;
    _animationOptions.limit = 40
    _animationOptions.distance = 30; 
};
于 2013-07-31T06:27:45.080 回答