5

現在のプロジェクトにrapidxmlを含めようとしています。ただし、ビルドされません。

Visual Studioは、このコード(rapidxml.hpp:419 + 451)について文句を言います。

419: void *memory = allocate_aligned(sizeof(xml_attribute<Ch>));
420: xml_attribute<Ch> *attribute = new(memory) xml_attribute<Ch>;

コンパイラは言うでしょう

Rapidxml.hpp(420):エラーC2061:構文エラー:識別子'メモリ'

そして、これがコンパイラをどのように混乱させるかを私はちょっと見ています。それは実際私もかなり混乱させます。(memory)そこで行うことの一部は何new(memory) xml_attribute<Ch>ですか?

その(memory)部分を削除すると、正常にコンパイルされます。
また、gccは(memory)includedを使用して問題なくコンパイルします。

編集:
ああ、そして私はいくつかのメモリデバッグを行うために過負荷newになりました。newの配置はサポートされていません。DEBUG_NEWDEBUG_NEW

4

4 に答える 4

3

これが私の提案です。「メモリ」自体はどこかでマクロとしても定義されており、拡張されているため問題が発生しています。したがって、(正規表現を使用して)検索して#define.memory、メモリがマクロとして定義されているかどうかを確認します。

次のステートメントについては、次の形式です。

new(allocator) ObjectType(...)

独自のメモリアロケータを使用してメモリを割り当てる場合に使用されます。

お役に立てれば。

于 2011-01-21T08:46:44.237 に答える
3

そのファイルに#include<new>が含まれていますか?

于 2011-01-21T08:53:28.947 に答える
1

これは「新しい配置」と呼ばれます。memory新しいメモリを割り当てる代わりに、xml_attributeのインスタンスをインスタンス化します。見る:

http://www.parashift.com/c++-faq-lite/dtors.html#faq-11.10

ただし、VC2010の構文に問題がある理由はわかりません。

于 2011-01-21T08:49:57.063 に答える
1

構文new (pointer) type( argument )配置構文と呼ばれ、基本的には、で以前に割り当てられたメモリを介してtype指定されたコンストラクターの呼び出しを表します。argumentpointer

示されている限り、構文は正しいです。おそらく、上の数行には、パーサーを混乱させるセミコロンまたは構文エラーがありませんがmemory、識別子は前の行で定義されたものとして正しく使用されています。(そしてそれは実装のための言語によって予約されていません)

于 2011-01-21T08:52:10.790 に答える