C++ function not found during compilation

Posted by forthewinwin on Stack Overflow See other posts from Stack Overflow or by forthewinwin
Published on 2012-06-10T22:05:17Z Indexed on 2012/06/10 22:40 UTC
Read the original article Hit count: 223

Filed under:
|
|

For a homework assignment: I'm supposed to create randomized alphabetial keys, print them to a file, and then hash each of them into a hash table using the function "goodHash", found in my below code.

When I try to run the below code, it says my "goodHash" "identifier isn't found". What's wrong with my code?

#include <iostream>
#include <vector>
#include <cstdlib>
#include "math.h"
#include <fstream>
#include <time.h>
using namespace std;

// "makeKey" function to create an alphabetical key 
// based on 8 randomized numbers 0 - 25.
string makeKey() {
    int k;
    string key = "";
    for (k = 0; k < 8; k++) {
        int keyNumber = (rand() % 25);
        if (keyNumber == 0)
            key.append("A");
        if (keyNumber == 1)
            key.append("B");
        if (keyNumber == 2)
            key.append("C");
        if (keyNumber == 3)
            key.append("D");
        if (keyNumber == 4)
            key.append("E");
        if (keyNumber == 5)
            key.append("F");
        if (keyNumber == 6)
            key.append("G");
        if (keyNumber == 7)
            key.append("H");
        if (keyNumber == 8)
            key.append("I");
        if (keyNumber == 9)
            key.append("J");
        if (keyNumber == 10)
            key.append("K");
        if (keyNumber == 11)
            key.append("L");
        if (keyNumber == 12)
            key.append("M");
        if (keyNumber == 13)
            key.append("N");
        if (keyNumber == 14)
            key.append("O");
        if (keyNumber == 15)
            key.append("P");
        if (keyNumber == 16)
            key.append("Q");
        if (keyNumber == 17)
            key.append("R");
        if (keyNumber == 18)
            key.append("S");
        if (keyNumber == 19)
            key.append("T");
        if (keyNumber == 20)
            key.append("U");
        if (keyNumber == 21)
            key.append("V");
        if (keyNumber == 22)
            key.append("W");
        if (keyNumber == 23)
            key.append("X");
        if (keyNumber == 24)
            key.append("Y");
        if (keyNumber == 25)
            key.append("Z");
    }
    return key;
}

// "makeFile" function to produce the desired text file.
// Note this only works as intended if you include the ".txt" extension,
// and that a file of the same name doesn't already exist.
void makeFile(string fileName, int n) {
    ofstream ourFile;
    ourFile.open(fileName);
    int k; // For use in below loop to compare with n.
    int l; // For use in the loop inside the below loop.
    string keyToPassTogoodHash = "";
    for (k = 1; k <= n; k++) {
        for (l = 0; l < 8; l++) {    // For-loop to write to the file ONE key
        ourFile << makeKey()[l];
        keyToPassTogoodHash += (makeKey()[l]);
        }
        ourFile << "  " << k << "\n";// Writes two spaces and the data value
        goodHash(keyToPassTogoodHash); // I think this has to do with the problem
        makeKey(); // Call again to make a new key.
    }
}

// Primary function to create our desired file!
void mainFunction(string fileName, int n) {
    makeKey();
    makeFile(fileName, n);
}

// Hash Table for Part 2
struct Node {
    int key;
    string value;
    Node* next;
}; 
const int hashTableSize = 10;
Node* hashTable[hashTableSize];

// "goodHash" function for Part 2
void goodHash(string key) {
    int x = 0;
    int y;
    int keyConvertedToNumber = 0;
    // For-loop to produce a numeric value based on the alphabetic key,
    // which is then hashed into hashTable using the hash function
    // declared below the loop (hashFunction).
    for (y = 0; y < 8; y++) {
        if (key[y] == 'A' || 'B' || 'C')
            x = 0;
        if (key[y] == 'D' || 'E' || 'F')
            x = 1;
        if (key[y] == 'G' || 'H' || 'I')
            x = 2;
        if (key[y] == 'J' || 'K' || 'L')
            x = 3;
        if (key[y] == 'M' || 'N' || 'O')
            x = 4;
        if (key[y] == 'P' || 'Q' || 'R')
            x = 5;
        if (key[y] == 'S' || 'T')
            x = 6;
        if (key[y] == 'U' || 'V')
            x = 7;
        if (key[y] == 'W' || 'X')
            x = 8;
        if (key[y] == 'Y' || 'Z')
            x = 9;
        keyConvertedToNumber = x + keyConvertedToNumber; 
    }
    int hashFunction = keyConvertedToNumber % hashTableSize;
    Node *temp;
    temp = new Node;
    temp->value = key;
    temp->next = hashTable[hashFunction];
    hashTable[hashFunction] = temp;
}

// First two lines are for Part 1, to call the functions key to Part 1.
int main() {
    srand ( time(NULL) );            // To make sure our randomization works.
    mainFunction("sandwich.txt", 5); // To test program
    cin.get();
    return 0;
}

I realize my code is cumbersome in some sections, but I'm a noob at C++ and don't know much to do it better.

I'm guessing another way I could do it is to AFTER writing the alphabetical keys to the file, read them from the file and hash each key as I do that, but I wouldn't know how to go about coding that.

© Stack Overflow or respective owner

Related posts about c++

Related posts about homework