4

私はこれが非常にばかげた質問であることを知っていますが、これは非常に混乱し、いらいらさせられます. GCC コンパイラでコード ブロックを使用しており、クラスで単純に文字列変数を作成しようとしています。

#ifndef ALIEN_LANGUAGE
#define ALIEN_LANGUAGE

#include <string>

class Language
{
    public:

    private:
        string str;
};

#endif

奇妙なことに、コンパイラは次のようなエラーで停止します。

C:\Documents and Settings\...|11|error: `string' does not name a type|
||=== Build finished: 1 errors, 0 warnings ===|

なんらかの理由で、私の main.cpp が「 #include 」を検出できるクラス「文字列」を見つけることができませんが、私の言語クラスは何らかの理由で検出できません。

これは、メイン自体が文字列ファイルを表示できることを確認するために、私が簡単に書いたメインです。

//main.cpp

#include <iostream>
#include <string>
#include "alien_language.h"

using namespace std;

int main()
{
    string str;

    return 0;
}

誰が何が起こっているのか知っていますか?

4

6 に答える 6

11

using namespace std;

それが起こっていることです。

std::クラスの文字列にプレフィックスを付ける必要はありません。標準ライブラリのすべてが名前空間にありますstd

ちなみに、を使用するのは一般的に悪い習慣と見なされてusing namespace std;います。その理由と代わりに何をすべきかの詳細については、次の質問を確認してください: Using std Namespace

于 2009-09-03T06:58:30.763 に答える
7

文字列クラスは std 名前空間で定義されています。クラスを次のように変更する必要があります。

class Language
{
    public:

    private:
        std::string str;
};

これをヘッダー ファイルの先頭に追加することも可能ですが、お勧めしません。

using namespace std;
于 2009-09-03T06:59:32.087 に答える
6

string は名前空間 std にあり、ヘッダー ファイル内で完全に修飾する必要があります。

#include <string>

class Language
{
    public:

    private:
        std::string str;
};

using namespace std;ヘッダー ファイルでまたは類似のものを使用しないでください。

于 2009-09-03T06:59:18.483 に答える
2

std::string; として参照する必要があります。

于 2009-09-03T06:59:53.553 に答える
1

using namespace std;非常に重要な(皮肉のヒントを含む)行が欠落しているように見えます。クラスの前にそれを追加するか、明示的に使用してくださいstd::string strusing namespace std;それを含むファイルのメインスペースを汚染するため、ヘッダーファイルに行を追加しないことをお勧めします。

于 2009-09-03T06:59:34.897 に答える
0

string標準 C++のクラスはstd名前空間にあります。ヘッダーに次のようなものを書くか using std::string;、ヘッダーで std::string として完全に修飾します。

using namespace std;in header は悪い習慣であることに注意してください(こちらをお読みください)。

于 2009-09-03T06:59:46.113 に答える