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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
バッチからsqlplusの接続エラー...
-
適切な変換関数が存在しない???
-
HEW4での通信エラーについて
-
fortranでプログラムを実行する...
-
デバッグ中のエラーのことで教...
-
winnetwk.hについて
-
Excelのエラーで困ってます。
-
sys/time.hのインクルードがで...
-
Octaveが勝手に閉じる.
-
UNIX-Cのsystem関数でエラーを...
-
プログラムが動きません。。。...
-
キーの自動入力
-
構文エラーについて
-
BC30002: 型 'ListItem' が定義...
-
MakeSureDirectoryPathExists
-
C言語について質問です
-
Windowsプログラミングのひな形...
-
multiple definitionというエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
Excelのエラーで困ってます。
-
fortranでプログラムを実行する...
-
バッチからsqlplusの接続エラー...
-
適切な変換関数が存在しない???
-
VB2008で定数に色の設定をした...
-
HEWを使用しているのですが、こ...
-
sys/time.hのインクルードがで...
-
BC30002: 型 'ListItem' が定義...
-
Handlesについて
-
Visual Studioのstrcpy_sについて
-
RightとLeft関数のライブ...
-
error C3867 関数呼び出しには...
-
デバッグ中のエラーのことで教...
-
コンパイルできません。
-
multiple definitionというエラー
-
ビルド失敗 指定されたファイ...
-
レコードセットをcloseする所で...
-
左側がクラス、構造体、共用体...
おすすめ情報