我正在写一些代码, 我需要有一个类变量, 它是一个静态的整数阵列。 我理解,我可以在页眉文件 A.h:
#ifndef A_H_
#define A_H_
class A
{
public:
static const int a[];
};
const int A::a[] = {1,2};
#endif
如果我把这个信头 包含在另一个文件里, 类似下面的, 主. cpp :
#include "A.h"
#include <iostream>
using namespace std;
int main()
{
A myA;
cout << "0: " << myA.a[0] << endl;
cout << "1: " << myA.a[1] << endl;
}
但假设我需要我的A类要更复杂一点, 我想要有一个 A. cpp 文件。 我会保持我的主. cpp 文件相同, 但随后更改 A. h 如下( 我刚刚添加了一个函数, 打印 A ) :
#ifndef A_H_
#define A_H_
class A
{
public:
void printA() const;
static const int a[];
};
const int A::a[] = {1,2};
#endif
然后在文件A. cpp:
#include "A.h"
#include <iostream>
using namespace std;
void A::printA() const
{
cout << "Printing in A.cpp." << endl;
cout << "A.0: " << a[0] << endl;
cout << "A.1: " << a[1] << endl;
}
使用 gcc -o A.o - c A. cpp 汇编 A. cpp 与 gcc - o A.o - c A. cpp 合并为 A. cpp 是罚款。 但是,在编译 main. cpp (gcc - o atest pain. cpp A.o) 时, 将此连接为“ `A: a: " 的多重定义失败 。
我一直在搜索互联网的解决方案,发现那些在信头中宣布变量的人,当他们把页眉包含在多个地方时,就会发现“多重定义”错误,而解决方案似乎是在信头中宣布变量外部程序,然后仅用一个源(非页眉)源文件来定义。但我无法同时声明一个类变量,既是静态的,也可以是外部的。如果我尝试,或者如果我只是宣布它外部程序,我就会得到关于变量不是静态的警告(我同时尝试“相冲突的标”错误 )。
因此,我的问题是:如果页眉文件需要包含在不止一个源文件里,那么,是否有可能有静态数组类变量?如果是,如何?