2012-04-10 2 views
-1

私自身の文字列クラスを作成し、 'String.hpp'という名前を付けてこのファイルを 'String.cpp'に含めました。しかし、g ++/gccは、私が何を試しても、 'String.hpp'を見つけることができないと言います。さらに、 'String'という名前のクラスも見つかりません。g ++/gccはString.hppというヘッダファイルを見つけることができません

私はC++の文字列は小文字の 'string'だと思っていました。 'String'はC++の予約クラスまたは単語ですか?

EDIT:

私は、コード本体をやり直すことで、この問題を解決しているように見えました。名前はすべて同じままです。私は次回これが起こると思います。自分のコードを見てそこで問題を見つけようとします。

+3

実際のコードの重要な部分を表示します。私たちはこのレベルの情報を手助けすることはできません。 – trojanfoe

+0

どのようなOSですか? Windowsはファイルの大文字小文字を区別しません。 'String'は予約語ではなく、問題ではありません。 – sje397

+0

*実際の*ファイルの内容をもっと表示してください。あなたが書いているように、問題はありません。しかし、悪魔が詳細に... –

答えて

3

C++では、文字列はキーワードではなく標準定義型です。あなたのコンパイラは、それが起こるものは何でもあなたのクラスについて知っているだろうins'tあなたの文字列のヘッダーを見つけることができない場合とそう

#include <string> 

//elsewhere 

std::string str("hi"); 

ように使用されます。

このように独自のヘッダーを含める必要があります。角括弧ではなく、引用符に注意してください。角カッコは、コンパイラが現在のディレクトリではなくインクルードディレクトリを検索する必要があることを意味します。

#include "String.hpp" 
//else where 
yournamepsace::String str //etc... 

これは、標準バージョンと衝突していないだろう、あなたはしかし、あなたは非常に類似した名前を扱う間違いなくなりますよう、それが名前空間であることを確認する必要があります。

コンパイラはまだ、あなたはファイルがあなたのソースファイルが入っている同じディレクトリにあることを確認する必要があります見ることができない場合。

最後に、これはプログラミングの練習のいくつかの並べ替えであるならば、続けていくが、これがプロダクションコードの場合は、std :: stringを使用することを検討してください。世界は別の文字列を必要としません。 :)

+0

こんにちは111111、私は名前空間それを行う。 – chlong

+0

@chlongまだ動作していませんか?あなたのインクルードラインは何ですか?あなたのディレクトリ構造は何ですか?私たちはあなたに良い答えを与えるためにこの情報が必要です。 – 111111

+0

こんにちは111111、私はちょうどコード全体をredidし、それは#includeについてもう不平を言っていません。名前はまだ同じです。ディレクトリ構造については、2つのファイル 'String.cpp'と 'String.hpp'が同じディレクトリにあります。 – chlong

2

私の疑惑は、あなたが

#include <String.hpp> 

を行っている。これは、コンパイラがファイルを検索する場所から、現在のディレクトリを除外しています。その場合、実行する場合は、

#include "String.hpp" 

この場合、コンパイラは現在のディレクトリも検索します。

+0

こんにちはジョン、私はそれも考えました。 2つのファイルは同じディレクトリにあり、実際には#include "String.hpp" – chlong

関連する問題