Sto scrivendo del codice in cui ho bisogno di avere una variabile di classe che sia un array int statico. Capisco che posso fare questo con qualcosa di simile nel file di intestazione, Ah:variabile di classe array statico "multiple definition" C++
#ifndef A_H_
#define A_H_
class A
{
public:
static const int a[];
};
const int A::a[] = {1,2};
#endif
Questo funziona bene se sto quindi compresa questa intestazione in un solo altro file, qualcosa di simile a quanto segue, principale. 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;
}
Ma supponiamo che ho bisogno della mia classe a ad essere un po 'più complicato, e voglio avere file come pure un A.cpp. Terrò il mio file main.cpp lo stesso, ma poi cambiare Ah come segue (Ho appena aggiunto una funzione, StampaÂ):
#ifndef A_H_
#define A_H_
class A
{
public:
void printA() const;
static const int a[];
};
const int A::a[] = {1,2};
#endif
E poi nel file di 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;
}
Compilare Ao con gcc -o Ao -c A.cpp va bene. Ma il collegamento di questo quando si compila main.cpp (gcc -o atest main.cpp A.o) fallisce con "definizione multipla di` A :: a '".
Ho setacciato Internet per trovare soluzioni e ho trovato persone che hanno dichiarato variabili nelle intestazioni che ricevono l'errore "a definizione multipla" quando includono l'intestazione in più posizioni e la soluzione sembra essere quella di dichiarare il extern variabile nell'intestazione, quindi definirlo in un solo file sorgente (non di intestazione). Ma non posso dichiarare una variabile di classe sia statica che esterna, posso? Se provo, o se lo dichiaro extern, ricevo un avvertimento sulla variabile che non è statica (anche un errore "specifiers in conflitto" quando provo entrambi).
Quindi, la mia domanda: è possibile avere variabili di classe dell'array statico nel caso in cui il file di intestazione debba essere incluso in più di un file sorgente? Se é cosi, come?