Statik int dizisi olan bir sınıf değişkenine sahip olmam gereken bir kod yazıyorum. Ben, başlık dosyasında böyle bir şey ile Ah bunu anlıyorum: Sonra, ana aşağıdaki gibi bu sadece bir başka dosyada başlık şey dahil olmam durumundastatik dizi sınıf değişkeni "çoklu tanım" C++
#ifndef A_H_
#define A_H_
class A
{
public:
static const int a[];
};
const int A::a[] = {1,2};
#endif
Bu sadece iyi çalışır. 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;
}
Ama biraz daha karmaşık olmak benim a sınıfı ihtiyaç varsayalım, ve bir A.cpp yanı dosyasını sahip olmak istiyorum. Aynı benim main.cpp dosyasını tutmak, ancak aşağıdaki gibi sonra (ben sadece bir işlevi, Printa ekledik) Ah değiştireceğiz:
#ifndef A_H_
#define A_H_
class A
{
public:
void printA() const;
static const int a[];
};
const int A::a[] = {1,2};
#endif
Ve sonra dosya A.cpp içinde:
#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;
}
Ao -c Aocc ile Ao derlemesi A'cpp iyidir. Ancak main.cpp (gcc -o atest main.cpp A.o) derlenirken bunu bağlamak “A :: a” nın çoklu tanımıyla başarısız olur.
İnterneti çözümler için inceliyordum ve üstbilgisinde birden çok yerde "birden çok tanım" hatası alan değişkenlerde bulunan değişkenlere sahip kişiler buldum ve çözüm, bildirimde bulunmak için görünüyor. üstbilgide değişken extern, daha sonra sadece bir kaynak (başlıksız) kaynak dosyasında tanımlayın. Ama hem statik hem de harici bir sınıf değişkeni ilan edemem, yapabilir miyim? Eğer dener, ya da sadece extern ilan edersem, değişkenin statik olmadığına dair bir uyarı alırım (her ikisini de denediğimde de "çakışan bir belirleyici" hatası).
Yani, sorum şu: başlık dosyasının birden fazla kaynak dosyasına dahil edilmesi gerektiğinde, statik dizi sınıfı değişkenlerine sahip olmak mümkün müdür? Öyleyse nasıl?