初始化私有数组如何从头文件中C++
How init private array C++ out of header file
我对初始化数组有问题
这是我的代码
*L4_Z2_RzymArab.hpp*
class L4_Z2__RzymArab
{
public:
//zmienne
//konsturktory i destruktory
L4_Z2__RzymArab();
~L4_Z2__RzymArab();
//funkcje
static int rzym2arab(string rzym) throw(RzymArabException);
static string arab2rzym(int arab) throw(RzymArabException);
static void set__data_length(int d);
private:
//zmienne
static int data_length;
static string liczby[]; //Rzymskie
static int liczby_ar[]; //Cyfry
static char accept_chars[]; //Dozwolone znaki
//Wielkość tablic
static int size__liczny;
static int size__liczby_ar;
static int size__accept_chars;//sizeof(a)/sizeof(*a)
//funkcje
static bool is_roman_num(string rzym);
};
L4_Z2_RzymArab.cpp
//Romain numeric system
string L4_Z2__RzymArab::liczby[] =
{"I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M"};
//Arabic numeric system
int L4_Z2__RzymArab::liczby_ar[] =
{1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000};
//Level 3 - [12, 12]
//Level 2 - [8, 11]
//Level 1 - [4, 7]
//Level 0 - [0, 3]
//Array of allowed chars
char L4_Z2__RzymArab::accept_chars[] =
{'I', 'V', 'X', 'L', 'C', 'D', 'M'};
int size__liczny = sizeof(L4_Z2__RzymArab::liczby) / sizeof(L4_Z2__RzymArab::*liczby);
int size__liczby_ar = sizeof(L4_Z2__RzymArab::liczby_ar) / sizeof(L4_Z2__RzymArab::*liczby_ar);
int size__accept_chars = sizeof(L4_Z2__RzymArab::accept_chars) / sizeof(L4_Z2__RzymArab::*accept_chars);
[...]
http://www.cplusplus.com/doc/tutorial/arrays/
我收到错误:
L4_Z2__RzymArab.cpp:19:9: error: ‘std::string L4_Z2__RzymArab::liczby [13]’ is private
string L4_Z2__RzymArab::liczby[] =
^
L4_Z2__RzymArab.cpp:34:45: error: within this context
int size__liczny = sizeof(L4_Z2__RzymArab::liczby) / sizeof(L4_Z2__RzymArab::*liczby);
^
L4_Z2__RzymArab.cpp:34:79: error: expected unqualified-id before ‘*’ token
int size__liczny = sizeof(L4_Z2__RzymArab::liczby) / sizeof(L4_Z2__RzymArab::*liczby);
^
L4_Z2__RzymArab.cpp:34:80: error: ‘liczby’ was not declared in this scope
int size__liczny = sizeof(L4_Z2__RzymArab::liczby) / sizeof(L4_Z2__RzymArab::*liczby);
^
L4_Z2__RzymArab.cpp:23:6: error: ‘int L4_Z2__RzymArab::liczby_ar [13]’ is private
int L4_Z2__RzymArab::liczby_ar[] =
^
L4_Z2__RzymArab.cpp:35:48: error: within this context
int size__liczby_ar = sizeof(L4_Z2__RzymArab::liczby_ar) / sizeof(L4_Z2__RzymArab::*liczby_ar);
^
L4_Z2__RzymArab.cpp:35:85: error: expected unqualified-id before ‘*’ token
int size__liczby_ar = sizeof(L4_Z2__RzymArab::liczby_ar) / sizeof(L4_Z2__RzymArab::*liczby_ar);
^
L4_Z2__RzymArab.cpp:35:86: error: ‘liczby_ar’ was not declared in this scope
int size__liczby_ar = sizeof(L4_Z2__RzymArab::liczby_ar) / sizeof(L4_Z2__RzymArab::*liczby_ar);
^
L4_Z2__RzymArab.cpp:31:7: error: ‘char L4_Z2__RzymArab::accept_chars [7]’ is private
char L4_Z2__RzymArab::accept_chars[] =
^
L4_Z2__RzymArab.cpp:36:51: error: within this context
int size__accept_chars = sizeof(L4_Z2__RzymArab::accept_chars) / sizeof(L4_Z2__RzymArab::*accept_chars);
^
L4_Z2__RzymArab.cpp:36:91: error: expected unqualified-id before ‘*’ token
int size__accept_chars = sizeof(L4_Z2__RzymArab::accept_chars) / sizeof(L4_Z2__RzymArab::*accept_chars);
^
L4_Z2__RzymArab.cpp:36:92: error: ‘accept_chars’ was not declared in this scope
int size__accept_chars = sizeof(L4_Z2__RzymArab::accept_chars) / sizeof(L4_Z2__RzymArab::*accept_chars);
我的错在哪里?我应该改进什么?
你定义
int size__liczny = ...
// etc.
何时应定义
int L4_Z2__RzymArab::size__liczny = ...
// etc.
顺便说一句,如果你有一个只包含静态成员的类,你不妨把它变成一个namespace
,比如
namespace L4_Z2__RzymArab
{
//funkcje
int rzym2arab(string rzym) throw(RzymArabException);
// etc... (have other public members here)
}
和
// Unnamed namespace for variables local to this file only
namespace
{
string liczby[] = { ... };
// etc... (the previous private members declared and defined here)
}
int L4_Z2__RzymArab::rzym2arab(string rzym)
{
...
}
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 读取文件的最后一行并输入到链接列表时出错
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 如何将内容数组写入文本文件?
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到