数组初始化unknowledge

时间:2013-09-24 16:17:09

标签: c++ arrays optimization initialization

我知道初始化数组的基本方法。我的编译器有一个关于int数组的错误我在一个我不理解的构造函数上初始化什么。我需要一些帮助。我的代码是:

Cpp文件:

#include <iostream>
using namespace std;
#include "ValidationController.h"

ValidationController::ValidationController() {
    // TODO Auto-generated constructor stub
    monthTable[12]={0,3,3,6,1,4,6,2,5,0,3,5};
}

ValidationController::~ValidationController() {
    // TODO Auto-generated destructor stub
}

和头文件:

#ifndef VALIDATIONCONTROLLER_H_
#define VALIDATIONCONTROLLER_H_

class ValidationController {
public:
    int monthTable[];//={0,3,3,6,1,4,6,2,5,0,3,5};
    ValidationController();
    virtual ~ValidationController();
};

#endif /* VALIDATIONCONTROLLER_H_ */

我得到的错误是:

  

.. \ src \ ValidationController.cpp:13:警告:扩展初始化程序   列表仅适用于-std = c ++ 11或-std = gnu ++ 11 [启用   默认]

  

.. \ src \ ValidationController.cpp:13:错误:无法转换   在作业中''到'int'

我不想让它变得静止。 是否有任何解决方案将声明保存到头文件中?或者我应该在导入后立即声明并在.cpp文件中初始化它。

3 个答案:

答案 0 :(得分:1)

正如评论中所建议的那样,您需要将其设置为静态并在.cpp

中初始化它
class ValidationController {
public:
    static int monthTable[];
    ValidationController();
    virtual ~ValidationController();
};

int ValidationController::monthTable[]={0,3,3,6,1,4,6,2,5,0,3,5};

ValidationController::ValidationController()
{
    // TODO Auto-generated constructor stub
}

ValidationController::~ValidationController() {
    // TODO Auto-generated destructor stub
}

int main()
{
    ValidationController v();
    return 0;
}

答案 1 :(得分:1)

如果你可以使用C ++ 11那么写: 在头文件中:     #include

class ValidationController {
public:
    std::array<int, 12> monthTable;
    ValidationController();
    virtual ~ValidationController();
};

在源文件中:

ValidationController::ValidationController() 
: monthTable{0,3,3,6,1,4,6,2,5,0,3,5}
{}

或者如果您不需要更改内容:

在头文件中:

#include <array>

class ValidationController {
public:
    const static std::array<int, 12> monthTable;
    ValidationController();
    virtual ~ValidationController();
};

在源文件中:

const std::array<int, 12> ValidationController::monthTable = {0,3,3,6,1,4,6,2,5,0,3,5};

答案 2 :(得分:0)

@ Sodved的解决方案(使用静态)和@Nobody的解决方案(使用Array)对我来说都非常好。但是如果你坚持不想让你的数组静态或使用任何其他数据结构,你可以试试这个。

class ValidationController {
    public:
    int monthTable[12];
    ValidationController();
    virtual ~ValidationController();
    };


ValidationController::ValidationController()
{
    // TODO Auto-generated constructor stub
    static const int temp[12] = {0,3,3,6,1,4,6,2,5,0,3,5};
    memcpy( monthTable, temp, 12*sizeof(int) );
}

ValidationController::~ValidationController() {
    // TODO Auto-generated destructor stub
}

int main()
{
    ValidationController v;
    return 0;
}

基本上,您仍然在构造函数中保留一份数据副本。但是,您还将获得ValidationController类的任何实例的数据副本。