6

こんにちは私はC++を学び始めたばかりです。私はこの大きなC++for Dummiesの本を購入し、それを経験してきました。これまでは本当に面白かったのですが、今は行き詰まっています。私はこの問題をグーグルで調べてきましたが、役に立ちませんでした。私はGNUGCCでコードブロック10.05を使用しています。

次のようなエラーが発生し続けます。

In function 'main':
undefined reference to 'SafeCracker(int)'

コードは複雑ではありません。私はまだ新しく、非常にイライラしています。この部分をスキップしたくありません。何が起こっているのか知りたい。

主要:

#include <iostream>
#include "safestuff.h"

using namespace std;

int main()
{
  cout << "Surprise, surprise!" << endl;
  cout << "The combination is (once again)" << endl;
  cout << SafeCracker(12) << endl;
  return 0;
}

働き:

#include <iostream>

using namespace std;

string SafeCracker(int SafeID)
{
    return "13-26-16";
}

ヘッダ:

using namespace std;

#ifndef SAFESTUFF_H_INCLUDED
#define SAFESTUFF_H_INCLUDED

 string SafeCracker(int SafeID);

#endif // SAFESTUFF_H_INCLUDED
4

2 に答える 2

2

リストした2番目のファイルを最初のファイルと一緒にコンパイルしていません。これを理解するには、gccで直接コンパイルしてみてください。

ファイルに名前が付けられていると仮定します。

  • main.cpp
  • SafeCracker.cpp
  • safestuff.h

これはあなたがしていることです

gcc main.cpp

あなたがこれをしているべきである間

gcc main.cpp SafeCracker.cpp

また、わかりやすくするために、SafeCracker.cppにはヘッダーファイルもインクルードする必要があります。それらを分離する理由は何ですか?

別の注意点として、ダニエル・フーの答えを見て、<iostream>自動的にあなたのために含ま<string>れています。この機能に依存するのではなく、<string>文字列を使用する各ファイルに含める必要があります。

(以下のコメントから)おそらく、main.cppをスタンドアロンファイルとしてビルドしようとしています。これにより、SafeCracker.cppはコンパイルされないままになります。必要なのは、Codeblocksでプロジェクトを作成し、それに3つのファイルすべて(*.cppファイルと*.hファイルの両方)を追加することです。

于 2012-10-26T00:26:33.507 に答える
1

あなたがしなかったからだと思います#include <string>

C ++は、文字列を使用するために文字列ライブラリをインポートする必要があります。そうしないと、すべてがchar配列として扱われます。

于 2012-10-26T00:26:12.090 に答える