トップ回答者
Visual C++ V4.0 Standard Editionでつくったプログラムの2010 Expressでのコンパイル

質問
-
初めてVisual C++ 2010 Expressを使用し、初めて投稿いたします。
10年以上前に購入したVisual C++ V4.0 Standard Editionを使って自作して正常に動作する
プログラムyaslog.cppを、Visual C++ 2010 Expressを使って、「太田研究室>Visual C++ 2010
Express プログラミング入門」に従ってWin32コンソールアプリケーションとしてにコピーしてコンパイルすると下記(1)の12,13行目が、(2)のエラーとなります。
(1) ソースプログラムの先頭17行
1 #include <stdio.h>
2 #include <winsock2.h>
3 #pragma comment(lib,"wsock32.lib")
4 #define A1_SUU 100000
5 struct a1c_d{// a1cのメンバーのデータの読み込み域
6 char a1_cs[7];//コールサイン、最後は0x00
7 char a1_han[15];// ハンドル、最後は0x00
8 char a1_no[7];//会員番号、最後は0x00、
9 } a1c[A1_SUU];
10 int a1c_ent_n;
11 int a1c_kazu;// a1cの有効エントリ数
12 CString a1c_buf;13 CStdioFile a1c_ifp;
以下省略
(2) コンパイルエラーの状況
.....\yaslog.cpp(12): error C2146: 構文エラー : ';' が、識別子 'a1c_buf' の前に必要です。
.....\yaslog.cpp(12): error C4430: 型指定子がありません - int と仮定しました。 .....\yaslog.cpp(12): error C4430: 型指定子がありません - int と仮定しました。.....\yaslog.cpp(13): error C2146: 構文エラー : ';' が、識別子 'a1c_ifp' の前に必要です。
.....\yaslog.cpp(13): error C4430: 型指定子がありません - int と仮定しました。
.....\yaslog.cpp(13): error C4430: 型指定子がありません - int と仮定しました。(インターネット上をもう1週間も駆けずり回っていますが、訳わかりません。)
どうやったら正常にコンパイルできるようになるのでしょうか?
回答
-
MFCで提供されるCStdioFileクラスを使っているようです。MFCは無償のExpress Editionには付属していません。Visual Studioを購入することでコンパイルできるようになります。
-
もちろん、LightSwitch ではコンパイルできません。
そもそも LightSwitch には C++ コンパイラは入っていません。
LightSwitch 2011 比較 | Microsoft Visual Studio
http://www.microsoft.com/japan/visualstudio/lightswitch/overview/compare
Visual Studio Professional が必要でしょう。
LightSwitch のアカデミック版を買える人であれば、Professional のアカデミック版も買えるのではないでしょうか。
MFC をすべて置き換える労力に比べれば、差額は小さいように思うのですが。- 回答としてマーク dr.yas 2012年1月27日 3:52
-
Visual C++ 4.0 というところが気になるのですが...
struct a1c_d { // a1cのメンバーのデータの読み込み域 char a1_cs[7]; //コールサイン、最後は0x00 char a1_han[15]; // ハンドル、最後は0x00 char a1_no[7]; //会員番号、最後は0x00、 } a1c[A1_SUU];
これって、アライメント調整大丈夫なんでしたっけ?単純に計算すると29バイトですが、29バイトの構造体になるんでしたっけ?winsock もインクルードしているので、気になります。
え?VC4を使い続けるの?サポートとか、脆弱性とか、新 OS での機能とか...
Jitta@わんくま同盟- 回答としてマーク dr.yas 2012年1月27日 3:53
-
メンバーが全てcharですから、アラインメント調整はされないのではないか、と認識しております。
V4.0で、コンパイルエラーも出ませんので、このままで良いような気がします。
Windows7とWindows vista上で、今のところ問題なく動作いたしておりますが、
本年3月末で定年退職で、アカデミック版が買えなくなりますので、
この2箇月間に改造を行って、支障があれば、2010 アカデミク版を購入するかもしれません。
支障がなければズットV4.0になりそうです。
それではVery Best 73 es 88.
- 回答としてマーク dr.yas 2012年1月27日 3:53
-
プログラムに対する動作保証の部分がどういう扱いになっているかとか
そういう部分がちょっと気になりますね。書き込み内容からすると大学の研究室の先生なのでしょうか。
研究室の中だけで使っていて動かなくなったとしても支障はないという話なら良いのですけれど。VisualStudioの古いバージョンに関して新しいOS上での開発環境自体の動作保証は多分ないと思いますし、
その動作保証が取れていない環境で作成したプログラムに信頼性があるのかとかと言う話になると結構面倒な話に
なると思います。動いているから良いと言うのは結果論ですけれど、動いているから不具合がないという保障にはならない
(たまたま奇跡的な巡り会わせで動いてるケースも実際にはありますから)と考えるときちんと動作保証が取れた開発環境に
移行するのが実は一番めんどくさくない方法だと思います。とはいえ、MFCを使える環境となるとお金が掛かりますから
もしVisual C++にこだわりがあるわけではなくて、GUIアプリケーションが作成したいのであれば
Visual C#に乗り換えてExpressEditionを使えばお金も不要でメンテナンスも可能になるかと思います。
元のプログラムを移植するハメになりますけれど今後の事まで考えるなら乗り換えもありかなと。乗り換えに関してはすぐでなくとも今後の1ステップと考えても良いかと思います。
当面は今の方針で乗り切るとして。
解決した時は、参考になったレスポンスの所にある[回答としてマーク]ボタンをクリックしてスレッドを締めましょう。- 回答としてマーク dr.yas 2012年1月27日 3:53
-
なるほど、ご自分で利用されるために作成された物なのですね。
そういう事でしたら動作保証云々の話は不要でした。LinuxでGCCとGTK2で組めるのであれば、Visual C#で組むのも大丈夫な気はします。
Visual C#でしたら、ウインドウ周りはVBのようにポトペタで作成して必要なコードを記述して行く形式で
作成出来るので結構楽ですよ。
コードのその物はC#なので結構細かい事も出来ますし。
あと完全に動作するかはともかくですが、monoを使うとVisual C#で作成したプログラムを
Linux上で動作させることが可能です。
結構面白いのでもし興味がおありでしたら試して見られるのも一興かと思います。
解決した時は、参考になったレスポンスの所にある[回答としてマーク]ボタンをクリックしてスレッドを締めましょう。- 回答としてマーク dr.yas 2012年1月27日 3:53
-
書かれている事を否定はしませんけれど、そんなにひどい提案ですか?
Visual C#を勧めたのはExpressEditionでGUIを使うなら楽に作成出来るからですし、
趣味でされているようなので興味をもって遊ぶ分には面白いと思いますけれど。
あと、Visual C#でやった方が楽と考えた場合にC#の提案をするのはそこまで変だとは思えないです。仕事で開発をするのに勧めるかどうかであれば、諸々考える必要があると思いますが、
楽しみとか興味でやる分には良いと思うのです。
いずれにしても最終的に選択するのはご本人になると思いますし、
GCCとGTK2でと言われているほどの方なので、そこの判断はご自分で可能だと思いますよ。
解決した時は、参考になったレスポンスの所にある[回答としてマーク]ボタンをクリックしてスレッドを締めましょう。
-
なぜでしょう?
元質問者さんは、BASIC→C++(Visual C++)と環境を乗り換えた実績があり、更にC++(Visual C++)→C(GCC+GTK2)と更に言語を変えることを考えておられるようです。ここまでの話を読む限り、言語・環境にこだわりがないように見受けられますから、選択肢の一つとしてC#をおすすめするのもアリかと。
逆にstd::stringやstd::iostreamに置き換えたところで、これらを引数に受け付ける通信ライブラリやGUIライブラリがなければ何の役にも立ちません。まぁBoost.Asioとか使えばいいのかな…?質問者さんへ:
Visual C++ Express EditionはMFCを含まずGUI開発は困難ですが、Visual C# Express Editionは.NET Frameworkのフルセットが扱えます。GUI開発についても上位エディションと比べて遜色なく行えます。
- 回答としてマーク dr.yas 2012年1月27日 3:52
すべての返信
-
MFCで提供されるCStdioFileクラスを使っているようです。MFCは無償のExpress Editionには付属していません。Visual Studioを購入することでコンパイルできるようになります。
-
もちろん、LightSwitch ではコンパイルできません。
そもそも LightSwitch には C++ コンパイラは入っていません。
LightSwitch 2011 比較 | Microsoft Visual Studio
http://www.microsoft.com/japan/visualstudio/lightswitch/overview/compare
Visual Studio Professional が必要でしょう。
LightSwitch のアカデミック版を買える人であれば、Professional のアカデミック版も買えるのではないでしょうか。
MFC をすべて置き換える労力に比べれば、差額は小さいように思うのですが。- 回答としてマーク dr.yas 2012年1月27日 3:52
-
皆様 色々と有り難うございます。
Acrobat Proのアカデミック版を、昨年8月に購入できましたので、
Visual C++のアカデミック版も買えるとは思います。
しかしながら、色々検討しました結果、Visual C++ V4.0のままでも、ソケットインタ
フェースが使用できるめどが立ちましたので、Visual C++ 2010は使用せず、
Visual C++ V4.0のままで、追加改造を行い、V4.0 Standard 版をズット使用する
ことに決定いたしました。
皆様どうも有り難うございました。
以上、厚く御礼申しあげます。Best 73!
-
Visual C++ 4.0 というところが気になるのですが...
struct a1c_d { // a1cのメンバーのデータの読み込み域 char a1_cs[7]; //コールサイン、最後は0x00 char a1_han[15]; // ハンドル、最後は0x00 char a1_no[7]; //会員番号、最後は0x00、 } a1c[A1_SUU];
これって、アライメント調整大丈夫なんでしたっけ?単純に計算すると29バイトですが、29バイトの構造体になるんでしたっけ?winsock もインクルードしているので、気になります。
え?VC4を使い続けるの?サポートとか、脆弱性とか、新 OS での機能とか...
Jitta@わんくま同盟- 回答としてマーク dr.yas 2012年1月27日 3:53
-
メンバーが全てcharですから、アラインメント調整はされないのではないか、と認識しております。
V4.0で、コンパイルエラーも出ませんので、このままで良いような気がします。
Windows7とWindows vista上で、今のところ問題なく動作いたしておりますが、
本年3月末で定年退職で、アカデミック版が買えなくなりますので、
この2箇月間に改造を行って、支障があれば、2010 アカデミク版を購入するかもしれません。
支障がなければズットV4.0になりそうです。
それではVery Best 73 es 88.
- 回答としてマーク dr.yas 2012年1月27日 3:53
-
プログラムに対する動作保証の部分がどういう扱いになっているかとか
そういう部分がちょっと気になりますね。書き込み内容からすると大学の研究室の先生なのでしょうか。
研究室の中だけで使っていて動かなくなったとしても支障はないという話なら良いのですけれど。VisualStudioの古いバージョンに関して新しいOS上での開発環境自体の動作保証は多分ないと思いますし、
その動作保証が取れていない環境で作成したプログラムに信頼性があるのかとかと言う話になると結構面倒な話に
なると思います。動いているから良いと言うのは結果論ですけれど、動いているから不具合がないという保障にはならない
(たまたま奇跡的な巡り会わせで動いてるケースも実際にはありますから)と考えるときちんと動作保証が取れた開発環境に
移行するのが実は一番めんどくさくない方法だと思います。とはいえ、MFCを使える環境となるとお金が掛かりますから
もしVisual C++にこだわりがあるわけではなくて、GUIアプリケーションが作成したいのであれば
Visual C#に乗り換えてExpressEditionを使えばお金も不要でメンテナンスも可能になるかと思います。
元のプログラムを移植するハメになりますけれど今後の事まで考えるなら乗り換えもありかなと。乗り換えに関してはすぐでなくとも今後の1ステップと考えても良いかと思います。
当面は今の方針で乗り切るとして。
解決した時は、参考になったレスポンスの所にある[回答としてマーク]ボタンをクリックしてスレッドを締めましょう。- 回答としてマーク dr.yas 2012年1月27日 3:53
-
どうも御親切に有り難うございます。
3月末までに何の問題も発見されず、4月以降にもし問題が発見されましたら、
たぶん、Visual C++とはおさらばして、GCCとGTK2に書き換えて、使用OSも
Linuxにすることになると思います。
昔、PC9801とBasicとおさらばした時に、業務ではSYSTEM5のC言語を使
ってましたので、Visual C++は、どんなものか知るために、アマチュア無線の
自作のログ管理プログラムyaslog(をBasicからVisualC++に全部書き換えた
プログラム)に使用しているだけで、他では使っておりませんので、動作保証が
なくても何ら問題はありませんので、、、、、、
それでは, VY TNX es 73 AGN..
-
なるほど、ご自分で利用されるために作成された物なのですね。
そういう事でしたら動作保証云々の話は不要でした。LinuxでGCCとGTK2で組めるのであれば、Visual C#で組むのも大丈夫な気はします。
Visual C#でしたら、ウインドウ周りはVBのようにポトペタで作成して必要なコードを記述して行く形式で
作成出来るので結構楽ですよ。
コードのその物はC#なので結構細かい事も出来ますし。
あと完全に動作するかはともかくですが、monoを使うとVisual C#で作成したプログラムを
Linux上で動作させることが可能です。
結構面白いのでもし興味がおありでしたら試して見られるのも一興かと思います。
解決した時は、参考になったレスポンスの所にある[回答としてマーク]ボタンをクリックしてスレッドを締めましょう。- 回答としてマーク dr.yas 2012年1月27日 3:53
-
書かれている事を否定はしませんけれど、そんなにひどい提案ですか?
Visual C#を勧めたのはExpressEditionでGUIを使うなら楽に作成出来るからですし、
趣味でされているようなので興味をもって遊ぶ分には面白いと思いますけれど。
あと、Visual C#でやった方が楽と考えた場合にC#の提案をするのはそこまで変だとは思えないです。仕事で開発をするのに勧めるかどうかであれば、諸々考える必要があると思いますが、
楽しみとか興味でやる分には良いと思うのです。
いずれにしても最終的に選択するのはご本人になると思いますし、
GCCとGTK2でと言われているほどの方なので、そこの判断はご自分で可能だと思いますよ。
解決した時は、参考になったレスポンスの所にある[回答としてマーク]ボタンをクリックしてスレッドを締めましょう。
-
なぜでしょう?
元質問者さんは、BASIC→C++(Visual C++)と環境を乗り換えた実績があり、更にC++(Visual C++)→C(GCC+GTK2)と更に言語を変えることを考えておられるようです。ここまでの話を読む限り、言語・環境にこだわりがないように見受けられますから、選択肢の一つとしてC#をおすすめするのもアリかと。
逆にstd::stringやstd::iostreamに置き換えたところで、これらを引数に受け付ける通信ライブラリやGUIライブラリがなければ何の役にも立ちません。まぁBoost.Asioとか使えばいいのかな…?質問者さんへ:
Visual C++ Express EditionはMFCを含まずGUI開発は困難ですが、Visual C# Express Editionは.NET Frameworkのフルセットが扱えます。GUI開発についても上位エディションと比べて遜色なく行えます。
- 回答としてマーク dr.yas 2012年1月27日 3:52
-
私が投稿したせいで、まるで炎上しているかのように、投稿が増えておりまして、
チョットビックリ仰天いたしておりますと共に、申し訳なく存じます。
年が63才にもなりますと、どうしても、新しいことに挑戦することが億劫になりがちで、
つい使い慣れた環境にもどりたくなっている様です。
とりあえずは、V4.0で、「a1clubの会員名簿を自作のアマチュア無線のログ管理ソフト
yaslogで自動取り込みする機能」等の追加に成功しましたので、当面ランニングテスト
状態ですが、4月以降は、毎日日曜日ですので、Visual C# Expressも視野に入れた
検討を致したいと存じます。
本当に貴重な情報を誠に有り難うございました。 心より厚く御礼申しあげます。
VY TNX es Best 73 es 88!
-
dr.yasさんには特に何の問題もなかったと思います。
むしろGCCとGTK2で何とかすると書かれていた意気込みには感銘しました。こちらの話題でスレッドを乱してしまってすいません。
ただ、色んな主張をされる方がいらっしゃいますのでこういう場でぶつかるのも致し方ないと思っています。
願わくば、言い合いでなく、議論になると良いのですけれど。ご趣味でされていると思いますので、色々と興味の赴くまま試されるのも面白いと思います。
どうか今後もプログラミングを楽しまれてください。
解決した時は、参考になったレスポンスの所にある[回答としてマーク]ボタンをクリックしてスレッドを締めましょう。- 編集済み PATIO 2012年1月27日 5:17