VC++6でコンパイルしています
コンパイラが古いのだと思いますが、最近のサンプルソース(誤記は無いはず)が合成時エラーします
struct _MP {
USHORT MaxPacket:11; /* 0..10 */ ←エラー
USHORT HSmux:2; /* 11..12 */
USHORT Reserved:3; /* 13..15 */
};
error C2059: 構文エラー : 'constant'
ここの
MaxPacket:11;
見たこと無い書き方なのですが
”:” がvc+++6でエラーなのだと思います
vc++6的にはどう書くのでしょうか?
よろしくお願いします
No.10ベストアンサー
- 回答日時:
>usの領域をstruct _MP の構造体でアクセスするための識別子が
>union _USB_HIGH_SPEED_MAXPACKET にはないんですが。
ない…ですね。
_MP.MaxPacketでアクセスできるのか??
とか疑ってしまいますが。
DDKのサンプルソース中では使われていなかったり…。
ネットで検索した範囲では
>struct _MP {
> USHORT MaxPacket:11; /* 0..10 */
> USHORT HSmux:2; /* 11..12 */
> USHORT Reserved:3; /* 13..15 */
>} ms;
>USHORT us;
と追加している例はありましたが。
# MSから提供されているヘッダファイルに手を加える…というのは気分的によろしくないのですが…
# 数年とかそういう単位で放置されている問題ですしねぇ…。
>例えばこれを、_MP2 とすると通ります
>(じゃそれでいいのか?)
一応、正規な方法としてはincludeする前にundefで消しちゃうこと…かと。
本来であればunicode文字セットを使うようにもろもろ修正するべき…なんでしょうけど。
>\mbctype.h(50): #define _MP 0x02 /* MBCS punct */
>これはあります。リンクしていませんが、一応無効にしても関係ありませんでした
mbctype.h書き換えたんでしょうか?
それはお勧めできませんが。
afxv_w32.hのインクルードは…ほぼ避けられない状況ですので
MS提供のヘッダを変更しない範囲でとれる対策は…
#undef _MP
#include <usbioctl.h>
とする。(mbctype.h内で宣言されている関数の使用時に問題が出るかもしれない)
か、
_MBCSを定義させない。(=ShiftJISなどを使わずにunicode文字セットに変更する)
のどちらかになるかと。
MS提供(というかライブラリ提供)のヘッダを書き換える行為は…
「ソース一式を他の環境に持って行ったときになぜかビルドできない」ということになります。
# 「なぜか」なんかではありませんがね…
まぁ、今回の件に関しては…放置しているMSにも問題があるんですが。
ググって見つかる程度なので困っている人はそれなりにいるはずで、MSにも通知は行っているかと思われますが…対応されていませんねぇ。
# 添加のMSとしては、「unicode使え。ShiftJISとかオレらの言語圏外のMBCSなんて知らん」ってとこでしょうかね。
afxv_w32.h 原因ですね
>mbctype.h書き換えたんでしょうか?
実験用に変更しましたが、変わらないので戻してあります
いろいろ有難う御座いました
提示の方法、使用させていただきます
No.9
- 回答日時:
#8 の方へ
>wormholeさん
>>上記だとstruct _MP {~};をunion _USB_HIGH_SPEED_MAXPACKETの定義内で定義している意味がないんですが。
>意味はあります、意味があるどころか必須です。
>us内の各ビットをフィールドとして使うためには必要です。usはUSHORT形の変数として使えますし、ビットフィールドとしても使えます。
よくunion _USB_HIGH_SPEED_MAXPACKET の定義を見てください。
usの領域をstruct _MP の構造体でアクセスするための識別子が
union _USB_HIGH_SPEED_MAXPACKET にはないんですが。
もしかしてVisual C++の独自拡張機能?
No.8
- 回答日時:
質問者さん_MPを削除するだけで大丈夫です。
wormholeさん
>上記だとstruct _MP {~};をunion _USB_HIGH_SPEED_MAXPACKETの定義内で定義している意味がないんですが。
意味はあります、意味があるどころか必須です。
>struct _MP {
>USHORT MaxPacket:11; /* 0..10 */
>USHORT HSmux:2; /* 11..12 */
>USHORT Reserved:3; /* 13..15 */
>};
>USHORT us;
us内の各ビットをフィールドとして使うためには必要です。usはUSHORT形の変数として使えますし、ビットフィールドとしても使えます。
No.7
- 回答日時:
WindowsDDKのヘッダファイル…みたいです。
>#6手元のDLしてあるDDKだと…
WinDDK\7600.16385.1\inc\api\usb200.hに定義が。
サンプルだと…
WinDDK\7600.16385.1\src\usb\usbview
あたりが検索にひっかかり易いでしょうか。
一応、提供側のモノですし、「下線に大文字を続けたものはCおよびC++では予約語である」は……セーフなんですかねぇ。
WindowsSDKとかにもたくさんあるようですが。
typedef struct _SECURITY_ATTRIBUTES {
とか
typedef struct _SYSTEMTIME {
とか…。
この回答への補足
度々有難うございます
>WinDDK\7600.16385.1\inc\api\usb200.hに定義が。
そのファイルです
とりあえず、_MP を _MP2 とかすればエラーは抜けるようです
もう少し検討してみます
No.6
- 回答日時:
「_+大文字」ではじまる識別子を何も考えずに使っている時点で未定義動作になるわけで, そういう観点ではこの「サンプルソース」そのものがおかしいといっちゃってもいいんじゃないでしょうか>#5.
_ を付けなきゃならない必然性も思い付かないし.
この回答への補足
回答有難うございます
どうやら
_MP が予約語のように扱われているかもしれません(少なくともvc++6では)
例えばこれを、_MP2 とすると通ります
(じゃそれでいいのか?)
No.5
- 回答日時:
># まぁVS2005でも_MPがdefineされている以上同じことかもしれませんが…。
ということで、追っかけた…
mbctype.hで_MPが定義され…
mbctype.hはatlmfc\include\afxv_w32.hでinclude。
該当箇所は…
#ifdef _MBCS
#ifndef _INC_MBCTYPE
#include <mbctype.h>
#endif
#ifndef _INC_MBSTRING
#include <mbstring.h>
#endif
#endif
………文字コードセットに「unicode文字セット」を使っていれば問題にはならない…らしい。
まぁ、VS2005(以降)じゃプロジェクト作成時のデフォルトはunicode文字セットを使用する。ですからねぇ……。
No.4
- 回答日時:
いくら古いとはいえ…VC++6でビットフィールドがエラーになるとは思えませんが…
>typedef union _USB_HIGH_SPEED_MAXPACKET {
>struct _MP { <=ここがエラー行です
この前に
#define _MP
とかされていたりしませんか?
手元のVS2005だと…
include\mbctype.h(50): #define _MP 0x02 /* MBCS punct */
なんてありますが…
さらに…「"#undef" _MP」で検索すると…
http://www.tech-archive.net/Archive/Development/ …
http://www.tek-tips.com/viewthread.cfm?qid=1539052
http://minkara.carview.co.jp/userid/552794/blog/ …
なんてページも…。
USBIOCTL.Hをインクルードする直前で
#undef _MP
してみたらどうですか?
そのWindowsDDK、VC++6で問題ないんでしょうかね?
# まぁVS2005でも_MPがdefineされている以上同じことかもしれませんが…。
この回答への補足
回答有難うございます
どうやら
_MP が予約語のように扱われているかもしれません(少なくともvc++6では)
例えばこれを、_MP2 とすると通ります
(じゃそれでいいのか?)
_MP は検索しても他で定義していません
\mbctype.h(50): #define _MP 0x02 /* MBCS punct */
これはあります。リンクしていませんが、一応無効にしても関係ありませんでした
No.3
- 回答日時:
>typedef union _USB_HIGH_SPEED_MAXPACKET {
>struct _MP {
>USHORT MaxPacket:11; /* 0..10 */
>USHORT HSmux:2; /* 11..12 */
>USHORT Reserved:3; /* 13..15 */
>};
>USHORT us;
>} USB_HIGH_SPEED_MAXPACKET, *PUSB_HIGH_SPEED_MAXPACKET;
上記の定義は、参考にされたソースのままなのでしょうか
それとも手を加えた結果のものでしょうか?
上記だとstruct _MP {~};をunion _USB_HIGH_SPEED_MAXPACKETの定義内で定義している意味がないんですが。
またUSHORTの型定義がされているヘッダファイルは、それより前にincludeしていますよね?
この回答への補足
昨晩は就寝してしまって起きたらたくさんレスがありました
皆さん有難うございます
>手を加えた結果のものでしょうか?
そのままです
>USHORTの型定義がされているヘッダファイルは、それより前にincludeしていますよね?
単独にUSHORTを使ってもエラーしないのでこれは問題ないです
No.2
- 回答日時:
エラーメッセージに行番号は書いてありませんか? その行番号は, その行ですか?
また,
union _USB_HIGH_SPEED_MAXPACKET
とか
struct _MP
とかの書き方は危険です. それぞれ
union USB_HIGH_SPEED_MAXPACKET
struct MP
にしたらどうなりますか?
この回答への補足
typedef union _USB_HIGH_SPEED_MAXPACKET {
struct _MP { <=ここがエラー行です
回答有難うございます
夜分ですのでご指摘を含め明日トライし報告します
No.1
- 回答日時:
あなたが知らないだけの話で、それはビットフィールド指定です。
エラーメッセージは本当にそれだけですか?
この回答への補足
足りなくてすみません、以下補足します
typedef union _USB_HIGH_SPEED_MAXPACKET {
struct _MP {
USHORT MaxPacket:11; /* 0..10 */
USHORT HSmux:2; /* 11..12 */
USHORT Reserved:3; /* 13..15 */
};
USHORT us;
} USB_HIGH_SPEED_MAXPACKET, *PUSB_HIGH_SPEED_MAXPACKET;
error C2059: 構文エラー : 'constant'
error C2334: '{' の前に予期しないトークンがありました。関数の本体は無視されます
ビットフィールド指定ですか、確かに知らないだけでした
そうすると構文のエラーでしょうか
このサンプルソースは、2010頃のマイクロソフト製です
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- FX・外国為替取引 MQL5にて謎のエラーが発生!だれか対処を教えてください! 1 2023/03/25 15:59
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- Visual Basic(VBA) VBAでファイルを開くプログラムがエラーです 2 2023/02/21 16:56
- Excel(エクセル) R列の1111/11/11以外、且つQ列の×の条件で該当行のAからAE列までオレンジに塗りつぶす 2 2022/07/02 10:18
- プリンタ・スキャナー キャノンmp490プリンター【エラー番号5400】で【プリンタートラブルが発生しました。電源を入れ直 2 2023/07/24 17:45
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
- その他(SNS・コミュニケーションサービス) ゲームでボイスチャットを使いたいんですが、親にどう説明したらいいですか 2 2022/08/03 14:07
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Access(アクセス) 実行時エラー3131 FROM 句の構文エラーです について 7 2022/06/13 15:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
C2146を回避するにはどうしたら...
-
win32api構造体引数の型指定に...
-
visual C++ でaruduinoとシリア...
-
レコードセットをcloseする所で...
-
適切な変換関数が存在しない???
-
入れ子になっている構造体配列...
-
BCC・stdio.h・_stddef.hのエラー
-
visual C++ でビルドの中止がで...
-
ビルドが失敗してしまいます
-
Excelのエラーで困ってます。
-
fortranでプログラムを実行する...
-
error C2143: 構文エラー の対処法
-
配列の初期化時に出たエラーの...
-
Visual Studioのstrcpy_sについて
-
Cabの解凍プログラム
-
Fortran コンパイルエラーについて
-
ビルド失敗 指定されたファイ...
-
不正なメモリ領域へのアクセス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
適切な変換関数が存在しない???
-
Excelのエラーで困ってます。
-
バッチからsqlplusの接続エラー...
-
fortranでプログラムを実行する...
-
HEWを使用しているのですが、こ...
-
コンパイルできません。
-
デバッグ中のエラーのことで教...
-
visual C++ でビルドの中止がで...
-
BC30002: 型 'ListItem' が定義...
-
Handlesについて
-
sys/time.hのインクルードがで...
-
ビルド失敗 指定されたファイ...
-
VB2008で定数に色の設定をした...
-
RightとLeft関数のライブ...
-
multiple definitionというエラー
-
WindowsからLinuxへの移植
-
HANDLEの宣言でのエラー
-
レコードセットをcloseする所で...
おすすめ情報