0

MingW で Codeblock IDE を使用していますが、次の種類のエラーに関する問題が進行中です。(ファイル || メッセージ)

obj\CEntity.o(.text+0x71a) || In function `ZN7CEntity6OnMoveEff':

また

obj\CArea.o(.bss+0x0) || In function `ZNSt6vectorI5CTileSaIS0_EEaSERKS2_':
obj\CApp_OnCleanup.o(.bss+0x0):C:\DevCpp\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\include\c++\3.4.2\bits\vector.tcc || first defined here

ある種のobjファイルとして場所を提供するため、コード内のどこにあるかを確認できないことに注意してください。

私の C++ は大幅に改善されていますが、コンパイラがどのように機能するかについてはまだよく理解できておらず、問題の原因や、このような問題を解決する方法がわかりません。コードの問題とは異なり、名前がスクランブルされているため、グーグルで検索するのは非常に困難です。

それが私を妨げていて、修正を見つけたり見つけたりできないので、誰かが助けてくれることを願っています!

(多くの相互リンクされたファイルがあり、エラーがどこにあるのかわからないため、コードを投稿しないことにしましたが、http://www.sdltutorials.com/sdl-tutorial-basicsのチュートリアルに従おうとしています。最初の作業に取り掛かることができる人はほとんどいませんが、後の作業は常に失敗しているように見えます.サンプルを使用すると機能するため、明らかに間違っています.)

4

1 に答える 1

0

多くの GCC ディストリビューション (私が使用している MinGW ディストリビューションなど) にはc++filt、C++ マングルされた名前をソース コード宣言に近いものに変換するユーティリティ名が付属しています (エラー メッセージでいくつかのアンダースコアが省略されていると思います)。

C:\temp>c++filt __ZN7CEntity6OnMoveEff
CEntity::OnMove(float, float)

MSVC には同様のユーティリティが付属しています。undname

ただし、使用している MinGW を更新する必要がある場合があります。MinGW 3.4.5 に戻ると、エラー出力に適切でデマングルされた名前が直接表示されます (同様に、MSVC が VC++6 に戻る場合も同様です)。

class CEntity {
    public:
        void OnMove(float, float);
};

int main()
{
    CEntity ent;
    ent.OnMove(1., 2.);
}

MinGW 3.4.5 でコンパイル:

C:\temp>g++ -o test.exe test.cpp
C:\...\ccwlXEih.o:test.cpp:(.text+0x43): undefined reference to `CEntity::OnMove(float, float)'
于 2012-08-25T09:58:11.717 に答える