I'm a beginner so the code might not be magnificent.
Here are the error messages :
ccg6buM6.o:send.cpp:(.text+0x843): undefined reference to `enigma(char*)'
ccg6buM6.o:send.cpp:(.text+0x843): undefined reference to `enigma(char*)'
collect2.exe: error: ld returned 1 exit status
These are my two .cpp files (enigma.cpp and send.cpp respectfully):
#include <iostream>
#include <string>
#include <cstring>
#include <fstream>
using namespace std;
int find(char arr[], char seek)
{
for(int i = 0; i < 26; i++)
{
if(arr[i] == seek) return i;
}
return -1;
};
struct Rotor
{
public:
char assignedRotor[26];
void setRotor(int rotor)
{
switch(rotor)
{
case 1:
for(int i = 0; i < 26; i++)
{
assignedRotor[i] = rotor1[i];
}
break;
case 2:
for(int i = 0; i < 26; i++)
{
assignedRotor[i] = rotor2[i];
}
break;
case 3:
for(int i = 0; i < 26; i++)
{
assignedRotor[i] = rotor3[i];
}
break;
};
}
private:
char rotor1[26] = {'E', 'K', 'M', 'F', 'L', 'G', 'D', 'Q', 'V', 'Z', 'N', 'T', 'O', 'W', 'Y', 'H', 'X', 'U', 'S', 'P', 'A', 'I', 'B', 'R', 'C', 'J'};
char rotor2[26] = {'A', 'J', 'D', 'K', 'S', 'I', 'R', 'U', 'X', 'B', 'L', 'H', 'W', 'T', 'M', 'C', 'Q', 'G', 'Z', 'N', 'P', 'Y', 'F', 'V', 'O', 'E'};
char rotor3[26] = {'B', 'D', 'F', 'H', 'J', 'L', 'C', 'P', 'R', 'T', 'X', 'V', 'Z', 'N', 'Y', 'E', 'I', 'W', 'G', 'A', 'K', 'M', 'U', 'S', 'Q', 'O'};
};
struct Reflector
{
char reflec[26] = {'Y', 'R', 'U', 'H', 'Q', 'S', 'L','D', 'P', 'X', 'N', 'G', 'O', 'K', 'M', 'I', 'E', 'B', 'F', 'Z', 'C', 'W', 'V', 'J', 'A', 'T'};
};
struct Machine
{
public:
Rotor rotor1, rotor2, rotor3;
Reflector reflector;
Machine()
{
rotor1.setRotor(1); rotor2.setRotor(2); rotor3.setRotor(3);
};
};
extern "C" char* enigma(char* message)
{
Machine enig;
int index;
char letter;
for(int i = 0; i < sizeof(message) - 4; i++)
{
letter = message[i];
// Passes through thrid rotor
index = (int)letter - 65;
letter = enig.rotor3.assignedRotor[index];
// Second
index = (int)letter - 65;
letter = enig.rotor2.assignedRotor[index];
// First
index = (int)letter - 65;
letter = enig.rotor1.assignedRotor[index];
// Reflector
index = (int)letter - 65;
letter = enig.reflector.reflec[index];
// Back through first rotor
index = find(enig.rotor1.assignedRotor, letter);
letter = (char)(index + 65);
// second
index = find(enig.rotor2.assignedRotor, letter);
letter = (char)(index + 65);
// third
index = find(enig.rotor3.assignedRotor, letter);
letter = (char)(index + 65);
message[i] = letter;
};
return message;
};
send.cpp:
#include <iostream>
#include <string>
#include <cstring>
#include <fstream>
#include "enigma.hpp"
using namespace std;
int main(int argc, char *argv[]) {
char message[30];
string filname = argv[2];
cout << "Communication chiffré avec Enigma via " << filname << endl;
while(message != "-1")
{
cout << "Message: ";
cin >> message;
if(message != "-1")
{
cout << "Encryption: " << enigma(message) << endl;
send(filname, enigma(message));
}
else
{
cout << "Message sent.";
}
}
}
return 0;
}
and finally enigma.hpp:
#include <iostream>
#include <string>
#include <cstring>
#include <fstream>
using namespace std;
#ifndef ENIGMA_HPP
#define ENIGMA_HPP
char* enigma(char* message);
#endif
I'm certain the error has everything to do with the declaration of enigma in the header file aswell as it's definition in enigma.cpp, however I can't see what I've done wrong.
Any pointers would be greatly appreciated.
EDIT: I get the error after typing:
g++ enigma.cpp send.cpp -o send
in the terminal.