0

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

cp文件:

#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 文件中对其进行初始化。

4

3 回答 3

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;
}
于 2013-09-24T16:34:52.907 回答
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};
于 2013-09-24T16:42:34.883 回答
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 类的任何实例的数据副本。

于 2013-09-24T20:43:48.877 回答