【问题标题】:syntax error : missing ';' before '{'语法错误:缺少';'前 '{'
【发布时间】:2012-04-29 12:15:32
【问题描述】:

我编写了一个带有两个属性(数组)的简单类。 我正在尝试将所有数组元素初始化为 0 或 NULL,但编译器(vc++ 2010)会抛出错误。

class Marina{
public:
char port[100];
char bport[25];

Marina(){
this->port = {0};
this->bport = {0}; 
}

};

我也试过这样的简单语句:

class Marina(){
public:
char port[100] = {0};
char port[25] = {0};



};

【问题讨论】:

  • 关闭你的构造函数定义,在}前加一个};

标签: c++


【解决方案1】:

你需要这个:

Marina() : port(), bport() {}

这会用全零初始化两个数组。

在 C++11 中,您可以在声明时定义非静态成员变量,因此您可以这样做:

class Marina {
public:
  char port[100] = {0};
  char bport[25] = {0};
};

【讨论】:

    【解决方案2】:
    Marina(){
    //std::fill is in <algorithm>
    std::fill (port, port + 100, 0);
    std::fill (bport, bport + 25, 0);
    

    此代码段缺少某些内容。没有结束大括号!我用只要有大括号就可以工作的东西替换了你的作业。

    除此之外,您的代码仍然不会以这种方式编译,因为必须在初始化列表中完成初始化:

    Marina()
        : port ({0}), bport ({0}) {}
    

    【讨论】:

    • 我才意识到这一点。要么使用成员初始化器,要么在创建数组后不要尝试将其分配给数组。相反,请使用std::fill
    • 我认为你需要bport{0} 而不是bport({0})
    • @juanchopanza,我实际上认为你需要括号。显然不是 :) GCC 根本不会抱怨 (){0}({0}),所以我想这取决于个人喜好。
    • 啊,好的,它不能为我编译。您可以尝试使用-pedantic-errors 进行编译吗?如果要输入值,则需要空的 (){}{}
    • @juanchopanza,我总是有最高的警告/错误级别。再次检查以确保。这很奇怪,但我想如果 ({}) 不能在你使用的任何东西上编译,我就不会再使用它了。可能是 GCC 4.6.2 中的错误或其他问题。
    【解决方案3】:

    您的大括号不匹配。您的开括号比闭括号多一个。大括号不匹配的代码格式不正确。不幸的是,响应缺少右括号的编译器消息并不总是最清晰的。编译器如何知道您忘记用右大括号关闭哪个左大括号?

    【讨论】:

    • 我没有忘记合上牙套。
    • @user1341970:您显示的代码没有匹配的左大括号和右大括号。数一数。
    猜你喜欢
    • 1970-01-01
    • 2013-07-30
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多