2

私はC++が初めてです。g++ コンパイラを使用しています。C++でSTLライブラリの操作を学ぼうとしていました。作業中に、このコードに問題が見つかりました。エラーの理由とエラーの対処方法を説明してください。

#include<iostream>
#include<list>
using namespace std;

typedef struct corrd{
int x;
int y;
}XY;

int main()
{
list<XY> values;
list<XY>::iterator current;
XY data[10];
for(int i=0;i<10;i++)
{
    data[i].x = i+10;
    data[i].y = i+20;   
}
for(int i=0;i<10;i++)
{
    values.push_front(data[i]);
}
current = values.begin();
while(current!=values.end())
{
    cout<<"X coord:"<<*current->x<<endl;//error: invalid type argument of unary ‘*’ (have ‘int’
    cout<<"Y coord:"<<*current->y<<endl;//error: invalid type argument of unary ‘*’ (have ‘int’
    current++;
}
}
4

4 に答える 4

2

アップデート

cout<<"X coord:"<<*current->x<<endl;
cout<<"Y coord:"<<*current->y<<endl;

に:

cout<<"X coord:"<<(*current).x<<endl;
cout<<"Y coord:"<<(*current).y<<endl;

また

cout<<"X coord:"<<current->x<<endl;
cout<<"Y coord:"<<current->y<<endl;

currentiterator です。逆参照しようとすると (*current)、*current実際のオブジェクト (x または y) へのポインターはポインターではなくオブジェクトであるため、 を呼び出す必要があります(*current).x

currentイテレータを逆参照しない場合は、呼び出しoperator->て実際のオブジェクトを参照できます。

operator->また、とoperator*の優先順位が異なることに注意してください。 C++ 演算子の優先順位を参照してください。

ポインターを std::list に格納する場合XYは、イテレーターを次のように使用する必要があります。

list<XY*> values;
list<XY*>::iterator current;
cout<<"X coord:"<<(*current)->x<<endl;  // parentheses is needed due to Operator Precedence
cout<<"Y coord:"<<(*current)->y<<endl;
于 2013-10-02T06:56:11.960 に答える
0

*current を使用して、反復子をそれに含まれるオブジェクトに「変換」します。そこに XY 構造体があるので (ポインターとしてではなく、値によって)、次のように記述する必要があります。

cout<<"X coord:"<<(*current).x<<endl;
cout<<"Y coord:"<<(*current).y<<endl;

(「->」ではなく「.」)。

もう 1 つの方法は、反復子の "->" 演算子を使用することです。含まれている型 (構造体またはクラス) のメンバーを直接使用できます。次に、次のように書く必要があります。

cout<<"X coord:"<<current->x<<endl;
cout<<"Y coord:"<<current->y<<endl;

「*」を削除するだけです

于 2013-10-02T06:57:26.573 に答える
0

反復子は、一般化されたポインターに少し似ています ( と と同じセマンティクスを*持ち->ます)。->イテレータが指す構造体のメンバーにアクセスするために正しく使用しています。そのメンバーは typeintであるため、逆参照するものは何も残っていません。だからこれをしてください:

cout<<"X coord:"<<current->x<<endl;
cout<<"Y coord:"<<current->y<<endl;
于 2013-10-02T06:58:09.983 に答える