2011-01-17 12 views
0
#include <iostream> 
#include <vector> 

using namespace std; 

int main() 
{ 
    vector <int> qwerty; 
    qwerty.push_back(5); 

    vector <int>* p = &qwerty; 

    cout << p[0]; //error: no match for 'operator<<' in 'std::cout << * p' 

} 

私は一般的にベクトルを持つポインタの使い方が不明です。なぜこれが動作しないのかについては非常に謎です。私の考えでは、これはスクリーンに5を印刷する必要があります。ベクトルへのポインティング

+0

単純な答え:ポインタを使用しないでください。ポインターはC++に存在し、特定の目的に役立ちます。必要でないときには使用しないでください。 – jalf

+0

ええ、これは私が持っている問題を伝えるように設計されたほんの単純化された例です。私が扱っている実際の実装を反映することを意図していません。 –

答えて

10
// either 
cout << (*p)[0]; 
// or 
cout << p->operator[](0); 
2

あなたの 'coutの' 行は同等です:pは[0]とあなたが逆参照qwerty配列へのポインタであるため

cout << qwerty; 

qwertyはint型のベクトルで、直接印刷することはできません。

http://www.cplusplus.com/reference/stl/vector/を見ると、[] overloadのクラスメソッドがあるので、qwerty [0]はintを返します。

したがってcout << qwerty[0];が機能します。

1

が良い「P [0]」を意味する何をするかを理解するには、次のステートメントを試すことができます:

cout << p[0][0]; 

この文は、コンソール上で「5」をプリントアウトすることができます。 p [0]はオブジェクト参照 "qwerty"を返すので、ベクトルオブジェクトサポートインデックス操作以来、(p [0])[0]を使ってベクトルの最初の要素を得ることができます。

関連する問題