我正在寫一些代碼,我需要有一個類變量是一個靜態詮釋數組。我知道我可以在頭文件中這樣的事情做到這一點,阿:靜態數組類變量「多重定義」C++
#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文件中。我會繼續我的main.cpp文件是相同的,但後來改啊如下(我只是增加了一個功能,printA):
#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 Ao -c編譯Ao -c A.cpp很好。但是,在編譯main.cpp(gcc -o atest main.cpp A.o)時,將其與「A :: a'的多重定義」進行連接失敗。
我一直在搜索互聯網尋找解決方案,並發現人們在其頭文件中聲明的變量在多個地方包含頭文件時得到「多重定義」錯誤,並且解決方案似乎是聲明頭文件中的變量extern,然後只在一個源(非頭文件)源文件中定義它。但是我不能聲明靜態和外部類型的變量,我可以嗎?如果我嘗試,或者如果我只是聲明它是外部的,我會得到一個關於變量不是靜態的警告(當我嘗試這兩個時,也是一個「衝突的說明符」錯誤)。
所以,我的問題:是否有可能有靜態數組類變量的情況下,頭文件需要包含在多個源文件?如果是這樣,怎麼樣?