[解決済み] 式はポインタからクラスへの型を持っていなければならない
質問
私は構造体 "MachineState"を持っていて、型 "MachineState*"のリストを作成しました。このリストを反復処理しようとすると、"MachineState*"が表示され続けます。
error C2839: invalid return type 'MachineState **' for overloaded 'operator ->
Microsoft Visual Studio 10を使用しています。このエラーをググったところ、"演算子はクラス、構造体、ユニオン、またはそれらへの参照を返す必要がある、ということしか分かりませんでした。
Struct MachineState
{
template <typename MachineTraits>
friend class Machine;
enum Facing { UP, RIGHT, DOWN, LEFT};
MachineState()
: m_ProgramCounter(1)
, m_ActionsTaken(0)
, m_Facing(UP)
, m_Test(false)
, m_Memory(nullptr)
,x(0)
,y(0)
,point1(25, 10)
,point2(10, 40)
,point3(40, 40)
{ }
int m_ProgramCounter;
int m_ActionsTaken;
Facing m_Facing;
bool m_Test;
int x;
int y;
Point point1;
Point point2;
Point point3;
};
としてリストを宣言しています。
std::list<MachineState*> zombs;
ここで、リストを反復処理しようとすると、"it->point1" で、式はクラス型へのポインタを持たなければならないというエラーが出続けます。
for(std::list<MachineState*>::iterator it = zombs.begin(); it != zombs.end(); it++)
{
Point points[3] = {it->point1, it->point2, it->point3};
Point* pPoints = points;
SolidBrush brush(Color(255, 255, 0, 0));
m_GraphicsImage.FillPolygon(&brush, pPoints,3);
}
何が問題なのか説明できる人がいたら教えてください。
解決方法は?
it
は
へのイテレータです。
ポインタ
から
MachineState
.
イテレータをデリファレンスする必要があります。 そして ポインタを指定します。
Point points[3] = {(*it)->point1, (*it)->point2, (*it)->point3};
編集する
デリフェレンシング とは 参照しているものを取得する .
デリファレンスは
*
または
->
演算子を使用します。
もし
it
は
MachineState
を使用することができます。
it.point1
もし
it
は
ポインタ
から
MachineState
を使用することができます。
it->point1
または
(*it).point1
もし
it
は
イテレータ
から
MachineState
を使用することもできます。
it->point1
または
(*it).point1
以来
it
は
イテレータからポインタ
に対して
MachineState
を使用する必要があります。
(*it)->point1
または
(**it).point1
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】LLVMで暗黙のうちに削除されたコピーコンストラクタの呼び出し
-
[解決済み】識別子 "string "は未定義?
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み】Enterキーを押して続行する
-
[解決済み】std::cin.getline( ) vs. std::cin