Я пытаюсь построить программу для Tolkinize строки (я пытаюсь сделать это без использования класса string - чтобы узнать больше об указателях и как работают символы) - у меня есть построил программу, которая, я думаю, работает (любые предложения были бы хорошими!) Когда я пытался скомпилировать программу, я получаю следующие случайные ошибки:
Ошибка 1, ошибка LNK2019: неразрешенный внешний символ «public: char * __thiscall Tokenize :: next (void)» (? Next @ Tokenize @@ QAEPADXZ), на который есть ссылка в функции _main Driver
Ошибка 2, ошибка LNK2019: неразрешенный внешний символ «public: __thiscall Tokenize :: Tokenize (char const * const, char)» (?? 0Tokenize @@ QAE @ QBDD @ Z), на который есть ссылка в функции _main Driver
Ошибка 3: фатальная ошибка LNK1120: 2 неразрешенных внешних кода C: \ Users \ Simmons 2.0 \ Documents \ School \ CS1410 \ project 5 \ Token \ Debug \ Token.exe
Я показал этот код нескольким друзьям, этот код, и никто из них не мог понять, что происходит - или что я делаю неправильно ...
Примечание. Я использую VS 2008 Express Edition - Windows 7 x64
main.cpp
#include <iostream>
#include "tokenize.h" /// Tolkenize class
using namespace std;
int main ( )
{
// create a place to hold the user's input
// and a char pointer to use with the next( ) function
char words[128];
char * nextWord;
cout << "\nString Tokenizer Project";
cout << "Enter in a short string of words:";
cin.getline ( words, 127 );
// create a tokenizer object, pass in the char array
// and a space character for the delimiter
Tokenize tk( words, ' ' );
// this loop will display the tokens
while ( ( nextWord = tk.next() ) != NULL ) {
cout << nextWord << endl;
}
system("PAUSE");
return 0;
}
tokenize.h
#include <iostream>
#include <cassert> /// assert
#include <cstdlib> /// system("cls")
using namespace std;
#ifndef TOKENIZE_H
#define TOKENIZE_H
#include <iostream>
#include <cassert>
#include "Tokenize.h"
using namespace std;
class Tokenize {
private:
char * current_ptr;
char delimiter;
public:
Tokenize ();
Tokenize (char);
Tokenize (char const string [], char Delimiter);
void setcurrent_ptr ( char * ptr ){ current_ptr = ptr; }
void setdelimiter ( char Delimiter ) { delimiter = Delimiter; }
char * getcurrent_ptr () { return current_ptr; }
char getdelimiter () { return delimiter; }
char * next ();
};
#endif
tokenize.cpp
#include <iostream>
#include <cassert> /// assert
#include "Tokenize.h"
using namespace std;
Tokenize::Tokenize() {
current_ptr = new char;
*current_ptr = NULL;
delimiter = ' ';
};
Tokenize::Tokenize(char Delimiter) {
current_ptr = new char;
*current_ptr = NULL;
delimiter = Delimiter;
};
Tokenize::Tokenize(char const string [], char Delimiter) {
current_ptr = string;
delimiter = Delimiter;
};
char * Tokenize::next() {
char * ptr = current_ptr;
If ( (*ptr) == NULL ) { return NULL; }
else {
while ((current_ptr)++ != ' ') {}
if ( (*current_ptr) == NULL) { return NULL; }
if ( *current_ptr == ' ' ) { *current_ptr = '/0'; (current_ptr)++; }
return ptr;
}
};
Из моего тестирования (комментируя строки) я думаю, что одна из ошибок произошла от tokinze.next()