预期不允许表达/类型名称

时间:2013-07-31 06:15:16

标签: c++ visual-studio-2010 visual-c++

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
};

如何解决此错误?请帮忙。

3 个答案:

答案 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; 
};