2

これは GCC/G++ に基づいており、通常は Ubuntu に基づいています。

これが私がやった私のサンプルプログラムです:

#include <iostream>

using namespace std;

int main()
{
    std::string c = "Test";
    cout << c;
    return 0;
}

上記のコードは正常に動作します。

しかし、私にはよくわからない2つの問題があります...

  1. 文字列宣言をstd:string( with one :) として記述しても問題なく動作します。違いは何ですか?

  2. プライベート変数を宣言するためにクラス内でstd:string(1 つを使用して) を使用すると、エラーerror: 'std' does not name a type が表示されます。この宣言の例::

class KType
{
private:
    std:string N;
};

誰かがこれらの問題を説明してもらえますか? どうもありがとう!

4

4 に答える 4

14

文字列宣言を std:string として記述することも正常に機能します。違いは何ですか。

別の方法でフォーマットすると、違いが少し明確になります。

std:
    string c = "Test";

というラベルを宣言し、によってグローバル名前空間にダンプされたstd名前を使用しています。のように正しく書くと、名前空間の名前を使用しています。stringusing namespace std;std::stringstringstd

これをstd::stringクラス内で使用してプライベート変数を宣言すると、エラー エラーが発生します。‘std’ does not name a type.

これは、ラベルをクラス定義に入れることができず、コード ブロックにのみ入れることができるためです。そこに正しく書く必要がstd::stringあります。(クラスがヘッダーで定義されている場合using namespace stdは、ソース ファイルよりも悪い考えなので、そうしないことをお勧めします。)

また、 を使用している場合はstd::string、 を使用する必要があり#include <string>ます。<iostream>必要以上の定義を引き込んでいるため、コードが偶然に機能しているように見えますが、移植可能に依存することはできません。

于 2013-04-20T12:38:21.683 に答える
5

文字列クラス ヘッダーを含める必要があります。

#include <string>

このコードにはタイプミスがあり、2 つ目のコロンがありません

std:string N;

次のようにする必要があります。

std::string N;

単一のコロンを使用すると、goto のラベルになりますが、これはおそらく意図したものではありません。

于 2013-04-20T12:37:20.493 に答える
3

最初の問題:

まず、#include <string>ディレクティブがありません。他のヘッダー ( など<iostream>) をヘッダーに自動的#includeに依存することはできません。<string>これから離れて:

2番目の問題:

文字列宣言を std:string として記述することも正常に機能します。違いは何ですか。

usingこれは、グローバル名前空間スコープに(悪) ディレクティブがあるためです。

using namespace std;

このディレクティブの効果は、名前空間のすべてのstd名前がグローバル名前空間にインポートされることです。これが、完全修飾されたものstd::stringと修飾されていないstringものが同じ型に解決される理由です。

そのusing namespace std;ディレクティブを省略した場合、修飾されていない名前を使用すると、コンパイラ エラーが発生しますstring

3 番目の問題:

クラス内でこの std::string を使用してプライベート変数を宣言すると、エラー エラーが発生します: 'std' does not name a type. この宣言の例:

コロンがありません。それは次のようになります。

std::string
//  ^

そしてそうではない

std:string
// ^
于 2013-04-20T12:38:20.357 に答える
2

文字列宣言を std:string として記述することも正常に機能します。違いは何ですか。

という別のものを宣言しない限り、違いはありませんstring。コード内で、同じタイプstringを参照してください。std::stringしかし、絶対に避けusing namespace stdてください。

クラス内でこの std::string を使用してプライベート変数を宣言すると、エラー エラーが発生します: 'std' does not name a type. この宣言の例:

#include <string>を使用するために必要std::stringです。何が起こっているかというと、最初のコード サンプル<iostream>に が含まれているよう<string>です。それに頼ることはできません。を含める必要があります<string>

于 2013-04-20T12:38:05.340 に答える