【问题标题】:extended initializer lists only available with扩展初始值设定项列表仅适用于
【发布时间】:2014-03-02 00:37:23
【问题描述】:

我是 C++ 的新手,我无法阅读我的错误,我能够消除大部分错误,但我只剩下一些错误,我请求帮助。

这是程序

#include <string>
#include <iostream>
using namespace std;
int main(){
 int *bN = new int[9];
 string bankNum;
 int *number = new int[9];
 int total, remain;
 int *multi = new int{7,3,9,7,3,9,7,3};
 cout<<"Please enter the bank number located at the bottom of the check"<<endl;
 cin>>bankNum;
 for(int i = 0; i < 8; i++){
  bN[i]= (bankNum[i]-48);
 }
 for(int i = 0; i < 8;i++){
  cout<<bN[i];
 }
 cout<<endl;
 for(int i = 0; i < 8;i++){
  cout<<multi[i];
 }
 cout<<endl;
 for(int i = 0; i < 8;i++){
  bN[i] = bN[i] * multi[i];
  cout<< bN[i];
 }
 cout<<endl;
 for(int i = 0; i < 8;i++){
  total += bN[i]
  cout<<total;
 }
 cout<<endl;
 remain = total % 10;
 if(remain == (bankNum[9] - 48)){
  cout<<"The Number is valad"<<endl;
  cout<<remain<<endl;
 }
}

和错误

wm018@cs:~$ c++ bankNum.cpp
bankNum.cpp: In function âint main()â:
bankNum.cpp:9:19: warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
bankNum.cpp:9:38: error: cannot convert â<brace-enclosed initializer list>â to âintâ in initialization
bankNum.cpp:30:3: error: expected â;â before âcoutâ

【问题讨论】:

    标签: c++ arrays loops if-statement


    【解决方案1】:

    这种初始化方式,使用大括号:

    int *multi = new int{7,3,9,7,3,9,7,3};
    

    在 2011 年被引入该语言。旧的编译器不支持它;一些较新的(例如您的)仅在您告诉他们时才支持它;对于您的编译器:

    c++ -std=c++0x bankNum.cpp
    

    但是,这种形式的初始化对于使用new 创建的数组仍然无效。由于它很小且仅在本地使用,您可以声明一个本地数组;这不需要 C++11 支持:

    int multi[] = {7,3,9,7,3,9,7,3};
    

    这还具有修复内存泄漏的优点 - 如果您使用 new 分配内存,那么您应该在完成后使用 delete 释放它。

    如果您确实需要动态分配,您应该使用std::vector 为您分配和释放内存:

    std::vector<int> multi {7,3,9,7,3,9,7,3};
    

    请注意,您的 GCC 版本相当旧,并且对 C++11 的支持不完整。

    【讨论】:

    • 不完整且有缺陷,即使是最新版本,当您尝试更加努力地推动 c++11 新语言功能时,有时仍会不符合标准……永远不要相信单个编译器的结果会声明代码格式是否正确。
    • @DieterLücking:很公平;我很少直接使用new,只用一个编译器检查语法。现在答案应该更正确了。
    • `int *multi = new int{7,3,9,7,3,9,7,3};'不是您所期望的:错误:无法在初始化中将“”转换为“int”
    • @DieterLücking:确实;这就是为什么我更正答案说“这种形式的初始化仍然无效”并提出了有效的替代方案。
    【解决方案2】:

    错误-:

    1)在你的第 5 个 for 循环中有一个语法错误,你忘了放;在total+=b[N]

    之后

    2) 因为你的数组 multi 很小并且值和大小是预定义的,所以用 int multi[] = {7,3,9,7,3,9,7,3} 初始化它; 这边

    提高程序效率的建议-: 1)而不是为每个for定义i变量5 循环会给出 C/C++ 中的错误,所以为了避免这种情况,您可以将 i 声明为全局变量

    【讨论】:

    • 请避免在代码中使用粗体,尝试使用反引号`
    • 欢迎普拉哈尔古普塔!正如@PanwenWang 所说,请考虑在代码中使用反引号而不是粗体文本。此外,使用降价编号列表来改进答案的格式也会很有用。
    猜你喜欢
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多