【问题标题】:Error array used as initializer and i don't know the error用作初始化程序的错误数组,我不知道错误
【发布时间】:2013-10-13 15:46:41
【问题描述】:

失败是在类 manejo.cpp 的构造函数中,错误是“manejo.cpp:3:16: error: array used as initializer”,我不知道这个错误在哪里。

下面附上manejo.hpp类的源码和manejo.cpp的实现,谢谢

#include "manejo.hpp"

manejo::manejo(){}
manejo::~manejo(){}

Hpp

#ifndef __MANEJO_HPP
#define _MANEJO_HPP

#include <iostream>
#include <fstream>
#include <vector>
#include <string>

using namespace std;
using std::vector;
using std::string;

class manejo{

private:

     char cadena[128]="";
     vector <string> linea;
     long cantidadPD = 0;
     vector <string> palabras;
     int Creglas = 0;
     vector <string> reglas;
     long atoi(const char *str);


public:

     manejo();
     ~manejo();
     void EstablecerVariables();
     int StoInt (string numero);

};

#endif 

【问题讨论】:

  • char cadena[128]=""; 你不能这样做。你真的尝试用谷歌搜索你得到的错误吗?
  • 你的编译器支持 C++11 吗?如果不是,您不能在声明时初始化非静态数据成员(就像您对cadena 所做的那样)。顺便说一句,检查你的包含警卫,不要使用双下划线。这些是为实现保留的。

标签: c++


【解决方案1】:

这个

 char cadena[128]="";

在传统 C++ 中是不合法的(在 C++11 中是合法的,但显然你没有使用它,否则你不会得到这个错误)。删除="",在你的构造函数中初始化数据成员,而不是在你的类中。例如

manejo::manejo()
{
    cadena[0] = '\0';
    ...
}

【讨论】:

  • 类内初始化自 C++11 起合法。
  • @BartoszKP:没关系。答案应该提到它从 C++11 开始有效。
  • 现在,“传统 C++” 是什么意思?
  • @Nawaz 显然这是我知道的 C++
  • @BartoszKP 它可能就像 OP 查看一些当前的 C++ 示例一样简单,并且有一个不符合标准的编译器,或者一个需要被告知使用 C++11 的编译器。他们无法编译 C++11 并不意味着他们不想使用它。
猜你喜欢
  • 1970-01-01
  • 2014-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多