我知道初始化数组的基本方法。我的编译器有一个关于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文件中初始化它。
答案 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类的任何实例的数据副本。