0

文字列をTolkinizeするプログラムを作成しようとしています (文字列クラスを使用せずにこれを実行しようとしています - ポインターと文字がどのように機能するかについて詳しく知るために) - 動作すると思われるプログラムを作成しました (任意のプログラムをコンパイルしようとすると、次のランダムなエラーが発生します。

エラー 1 エラー LNK2019: 未解決の外部シンボル "public: char * __thiscall Tokenize::next(void)" (?next@Tokenize@@QAEPADXZ) が関数 _main ドライバーで参照されています

エラー 2 エラー LNK2019: 未解決の外部シンボル "public: __thiscall Tokenize::Tokenize(char const * const,char)" (??0Tokenize@@QAE@QBDD@Z) 関数 _main ドライバーで参照

エラー 3 致命的なエラー LNK1120: 2 つの未解決の外部 C:\Users\Simmons 2.0\Documents\School\CS1410\project 5\Token\Debug\Token.exe

私はこのコードを数人の友人にコードを見せましたが、誰も何が起こっているのか、または私が間違っているのかを理解できませんでした...

注: VS 2008 Express Edition を実行しています - Windows 7 x64


メイン.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;
 }
};

私のテスト(行をコメントアウト)から、エラーの1つはtokinze.next()

4

3 に答える 3

2

tokenize.cpp をコンパイル/リンクしていないようです。

おそらくコード自体ではなく、Visual Studio でどのようにセットアップしたかです。

VS がアプリケーションに tokenize.cpp を含めていない可能性はありますか?

関数を tokenize.cpp から main.cpp に移動することで、これ問題であることをテストできます。エラーが解消された場合、それが問題です。

于 2010-02-04T16:12:57.003 に答える
2

リンカーとは関係ありませんが、ヘッダー Tokenizer.h で次のように言います。

 #include "Tokenize.h"

Tokenize.h とは何ですか? あなたはそれを示していません。また、あなたのインクルード ガードはこのファイルをガードしているようです。

于 2010-02-04T16:13:52.380 に答える