test.cpp:
Kod: Zaznacz cały
#include <iostream>
using namespace std;
#include "symbol.hpp"
int main()
{
return 0;
}
Kod: Zaznacz cały
#ifndef SYMBOLE_HH
#define SYMBOLE_HH
#include <iostream>
using namespace std;
enum Symbol { e, a, b, c, d };
Symbol tab_dod[5][5] = {{e,a,b,c,d},{a,d,e,b,c},{b,e,c,d,a},{c,b,d,a,e},{d,c,a,e,b}};
Symbol tab_mno[5][5] = {{e,e,e,e,e},{e,d,c,a,b},{e,c,d,b,a},{e,a,b,c,d},{e,b,a,c,d}};
Symbol tab_ode[5][5] = {{e,b,a,d,c},{a,e,d,c,b},{b,c,e,a,d},{c,d,b,e,a},{d,a,c,b,e}};
Symbol tab_dzi[5][4] = {{e,e,e,e},{c,d,a,b,},{d,c,b,a},{b,a,c,d},{a,b,d,c}};
#endif
Kod: Zaznacz cały
#include "symbol.hpp"
Symbol operator +(Symbol z1, Symbol z2)
{
return tab_dod[z1][z2];
}
Symbol operator *(Symbol z1, Symbol z2)
{
return tab_mno[z1][z2];
}
Symbol operator -(Symbol z1, Symbol z2)
{
return tab_ode[z1][z2];
}
Symbol operator /(Symbol z1, Symbol z2)
{
if(z2 != e)
return tab_dzi[z1][z2];
else
{
cerr << endl << " Blad! Proba dzielenia przez czynnik neutralny dodawania" << endl<< endl;
return e;
}
}
istream & operator >> (istream & StrmWej, Symbol & WczytSym)
{
Symbol TabSymboli[] = {a,b,c,d,e};
char ZnakSymbolu;
StrmWej >> ZnakSymbolu;
if (ZnakSymbolu < 'a' || 'e' < ZnakSymbolu) {
cerr << "Blad! Wprowadzony znak nie odpowiada zadnemu symbolowi."
<< endl;
}
WczytSym = TabSymboli[ZnakSymbolu-'a'];
return StrmWej;
}
ostream & operator << ( ostream & StrmWy, Symbol x )
{
StrmWy << "eabcd"[x];
return StrmWy;
}
g++ -c test.cpp
g++ -c symbol.cpp
g++ -o test test.o symbol.o
I ciągle dostaję w odpowiedzi błędy o następującej treści:
symbol.o:(.data+0x0): multiple definition of `tab_dod'
test.o:(.data+0x0): first defined here
symbol.o:(.data+0x80): multiple definition of `tab_mno'
test.o:(.data+0x80): first defined here
symbol.o:(.data+0x100): multiple definition of `tab_ode'
test.o:(.data+0x100): first defined here
symbol.o:(.data+0x180): multiple definition of `tab_dzi'
test.o:(.data+0x180): first defined here
collect2: ld returned 1 exit status
Kod programu to zwykłe podstawy niemniej jednak nie mam pojęcia dlaczego kompilator mówi że jest powtórna definicja tablic. Zwracam uwagę na to, że zastosowałem instrukcje warunkowe preprocesora.
Jeżeli komuś uda się to skompilować to prosiłbym o polecenia jakimi to skompilował. Całkiem możliwe, że jest tutaj jakiś banalny błąd którego akurat w tym momencie nie widzę. Z góry dziękuję za pomoc. Pozdrawiam