C++Builder 5.0でプログラムを作成しています。
Form1~Form3を作成し、Form1を自動生成の対象及びメインフォームとしました。Form1にはボタン1、Form2にはボタン2を用意し、ボタン1からはForm2を、ボタン2からはForm3を開くことが出来るようにしました。
Form1のボタン1には
TForm2 *Form2 = new TForm2(Application);
Form2->Show();
Form1->Hide();と記述し、
Form2のボタン2には
TForm3 *Form3 = new TForm3(Application);
Form3->ShowModal(); ← Form3はモーダルフォーム
と記述しました。Form1とForm2のPublic部にint型の変数iとjを用意し、
Form3から
Form1->i = 5;
Form2->j = 5; という様に値を代入すると
Form1の時はうまく代入できるのですが、Form2の変数に代入すると「Project1.exeがEAccessViolationクラスの例外を生成しました …」というエラーメッセージが表示されてしまいます。この原因は何でしょうか。なお、各フォームのヘッダファイルのインクルード はきちんと行っています。OSはWindows98です。御回答をどうかよろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

Form3を表示したときForm2がどういう挙動を取るのか説明がないので


何とも言えないですが、もしClose();とかdelete Form2;
されてたりするのであればForm2のインスタンスは破棄されている
可能性が高いので例外はスローされますよね?

というわけで補足を求めます。Form2はForm3がShowModal時は
画面に表示されているのでしょうか。

この回答への補足

御返事ありがとうございました。
Form2はそのまま表示しています。
しかしながら、色々と試してみたのですが、
Close()してdelete()したときと、
表示したままの時での違いはありませんでした。

補足日時:2001/03/19 00:23
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qふと、思ったのですが、fromなくても文は成り立ちますか? なぜ例外的に前置詞が残っているのですか?

ふと、思ったのですが、fromなくても文は成り立ちますか?
なぜ例外的に前置詞が残っているのですか?
気になって眠れないので簡単にでいいので説明よろしくお願いします

Where are you from?

英語英語英語

Aベストアンサー

from がなくても文としては成立するけど, 意味は変わるね.

あぁ, from の意味は分かってるよね?

Q【C#】Form1からForm2を表示したとき、Form2がForm1

【C#】Form1からForm2を表示したとき、Form2がForm1を所有する

検索しても見つからなかったので質問させていただきます。

Form1からForm2を表示(Form2.Instance.Show();)したとき、
Form2がForm1の上にこないように、また、Form2は必ずForm1のすぐ後ろであるようにして欲しいんです。

たとえば、
IEで検索ウィンドウを開いたときに、検索ウィンドウを表示していてもIEは操作できるけど(モードレス)、IEの後ろに検索ウィンドウが行くことはありません。
これはForm2.Instance.Show(this);とすればいいだけですが、
自分がやりたいのはその逆です。
検索ウィンドウの後ろにIEが行くことがないようにしたいんです。

Form1.Activateなどを使って無理やりさせようとしましたが、
無理だったので質問しました。

わかる方は教えていただけると嬉しいです。
お願いします。

(ちなみにVisualStudio2010、.NET Framework3.5です。)

Aベストアンサー

すみません C#でしたね ^^

Form1側に Form2型の変数を用意します

Form2 objForm2;

表示する際に
if ( objForm2 == null || objForm2.IsDisposed )
  objForm2 = new Form2();
this.Owner = objForm2;
objForm2.Show();


Form2側のFormClosingイベントで
if ( this.OwnedForms.Length != null ) {
  this.OwnedForms[0].Owner = null;
}
といった具合になるかと ・・・

Q英語のスペルと発音の関係ですが、sayを[sei]と発音しますが3人称

英語のスペルと発音の関係ですが、sayを[sei]と発音しますが3人称単数ではsaysを[sez]、過去形saidを[sed]と発音します。例外ですませれば簡単なのですが、aは元々すべてanで後ろに子音から始まる単語は発音しづらいからaに変化したと大学時代に習いました。何か歴史的な理由があると思います。どなたか英語史に詳しい方、教えていただけないでしょうか。

Aベストアンサー

これは例外という以外の説明はつかないと思います。歴史的にさかのぼると

古英語で saegth [saejθ], saegde [saejde](ae は綴り、発音記号ともつながった文字と考えてください。th に相当する古英語・中英語の文字は th で代用しておきます。不定詞・一人称単数・複数はそれぞれ secgan, secge, secgath で cg は bridge の dg のように発音します。この発音はすぐに二、三人称の g [j] に統一されました)

中英語で seyeth [sei(j)eθ], seyde [seide]

いずれも [ei] ないし [ej] で、短母音で発音されたことはありません。中英語期は正書法のようなものは厳密にはなく、書き手によって違いがありますが、それでも各々が発音をなるべく正確に写そうと工夫したもので、[seθ, sed] と読める綴りはありません。近代英語になり徐々に三単現は s に置き換わるようになりましたがやはり [e] と明確に読ませるような綴りはありません。これはつまり発音がいつ頃 [e] になったのかを特定するのがほぼ不可能ということです。

ここで、今では古文体専用となった thou に対する形を見ると

thou sayest / sayst

の2通りの綴りがあります。これらは [seiist / seist] であり [sest] という発音はありません。古英語・中英語でも saegst[saejst], sey(e)st[sei(je)st] で [e] ではありません。
大昔から、現代において古文として読むときまで [sest] と発音されたことはないことになります。

綴りに目に見える変化が現れれば、大体そのころ発音の変化が起きたことが想像がつきますが、変化がない場合時代を特定するのは非常に困難になります。録音が可能になってからの変化であれば辞書に古い発音として載ることもありますが、それすらないということはそれ以前にはすでに変わっていたということです。again(st) の gai が [ge, gei] ともに発音されることはご存知と思いますが、これも同様にいつ変わったのかよく分かりません。

このように、いつ変わったのかは特定不可能ですが、「なぜ」変わったのかのヒントになりそうなことはあります。ただしそれについて書かれた文圏を見たことがありませんので、あくまで推測です。
それは says, said の「弱形」の存在です。一般的な動詞はアクセントを持たないときも発音が大きく変わることはありませんが、say, said は直接話法や that 節を導入する際、ay/ai の部分がほとんど曖昧母音になることがあるそうです。これはあくまで現代語の場合ですが、昔 [seiz, seid] が通常の発音だった頃、弱い形として二重母音が短母音になったことがあるではあるまいか。そしてこれが標準的な発音にとって代わったのではないか、と想像することができます。

says/said の弱形については記載していない辞書もあるかと思いますが、参考にした岩波英和大辞典には記載があります。

なお、
>anで後ろに子音から始まる単語は発音しづらいから
冠詞はアクセントを持たないという点が重要です。n と子音が接触することよりも an にアクセントがないと *an man が ほとんど 'n man のようになり語頭に不自然な子音結合ができるので、これを避けることを選択するようになった結果です。冠詞にアクセントがあると不自然さはありませんが、an man のような言い方は結局廃れ a [ei] man となりました。

これは例外という以外の説明はつかないと思います。歴史的にさかのぼると

古英語で saegth [saejθ], saegde [saejde](ae は綴り、発音記号ともつながった文字と考えてください。th に相当する古英語・中英語の文字は th で代用しておきます。不定詞・一人称単数・複数はそれぞれ secgan, secge, secgath で cg は bridge の dg のように発音します。この発音はすぐに二、三人称の g [j] に統一されました)

中英語で seyeth [sei(j)eθ], seyde [seide]

いずれも [ei] ないし [ej] で、短母音で発音され...続きを読む

Qfor(int i = 100, long n = 1; i > n/3i; i++)

for(int i = 100, long n = 1; i > n/3i; i++)
のように、初期設定で型の違う変数を宣言したいんだけど
C++ではこんなふうに2つ以上の型を宣言してはいけないんですか?

Aベストアンサー

,

コンマ演算子の原理です。
forの初期化文で "," で区切れるのは値を返す文だけです。
よってintステートメントもlongステートメントも値を返さないので、この文では使用できません。

というか、むしろ、intステートメントの第2引数としてlongが認識されてしまいます。
外で

int i; long n;

とし

for(i = 0, n = 0; hoge; hoge)

なら可能です。

Q英語と数学

私の周りで英語が得意な人は数学が苦手だといいます。数学が得意な人は英語が苦手だといいます(先生や親戚、友人など)。

だいぶ前の「あるある大辞典」で得意科目は遺伝が関係していると言ってたような気がします。これは偶然に私の周りの人はそうだったということでしょうか?
今のところ例外はないのですが・・・

Aベストアンサー

あけましておめでとうございます。

アメリカに36年住んでいる者です。 私なりに書かせてくださいね。

たしかに能力に遺伝というものは働いているでしょう。 それが単に得て不得手と言う一般的なものから、極端に例としてIQは低いけどある一種のことにおいてはコンピューターも顔負け、と言う人もいますね。 数字に関してならすば抜けて記憶力がいいとか、単語力は抜群とか。

しかし、能力もそうですが、苦手・得意も遺伝もあるでしょうが、学説的にも証明されているように、生まれ持ったものだけが人を作り上げるわけではありませんね。

育った環境もそうですが、具体的にに私みたいに初めて英語に接した時の中学の英語の先生が好きになってしまったから人一倍に勉強したとか、ちょっとしたきっかけで基本が見えるようになったお陰で科目が好きになりそれが「得意」とされる物になったと言う事もあるでしょう。 勉強が苦にならないと言う事ですね。

また、得意・苦手はあくまでも何かと比較した物ですね。 他の人と比較したのでもあるでしょうし、英語の優等生であったけど大学や社会に入ったらできる人はもっといたため「得意」とはもう言えなくなったとか。

多くの日本人留学生が感じる事はこの逆ですね。 日本では数学の授業についていけなかったにもかかわらずこちらに来たらかなり程度の低い事をやっていて成績はAばっかりをとるようになり「得意」の科目になったと言う人はたくさんいると思います。 

また、「得意」といえる(ほかの人や物と比較して)ようになったため心理的に楽になったり、復習になったおかげで数学観念」が分かる様になり、勉強も進んでするようになりいい結果を生み出す原因にもなる事もありますね。

英語にしても英語学は苦手だったけど、社会に入り何かの理由で英語を使うようになり人からは「得意」と言われる事にもなった人もいると思います。

と言う事で、遺伝が関係していないとは断言しませんが他にもたくさんの理由があると私は信じます。

だからこそ、モチベーションと言う物を知ることによって「苦手」を「得意」に変える事ができると信じることができるようになり実際に得意なもの(少なくとも苦手と感じる事がなくなる)と言う事に自分を持っていけるようになるわけです。 モチベーションがこのアメリカで既に50年以上も重要性を認識された理由でもあります。

余談です。

4430+4431+4432+4433+4434+4435+4436+4437+4438+4439=が2秒以内にできる人は

1) 数学の観念が心から分かっている人
2) 雑学知識を持っている人 (9個の数字だったらどうでしょうか)
3) まぐれ

さて皆さんはどちらですか?

ちなみに私は高校の数学にいつも3週間ほど遅れていて大学の受験には自信がなかったためにある人に言われ中学の問題集(同じ事を何回もさせるタイプ)をとことんまでやったため一応「得意」な科目になり、アメリカの学校で「得意」がることができ、今では数字の観念が見始めている素人数学者です。 <g>

と言う事で、両方得意、両方ダメ、片方だけ得意という人はたくさんいると思います。

これでいかがでしょうか。 分かりにくい点がありましたら、補足質問してください。

あけましておめでとうございます。

アメリカに36年住んでいる者です。 私なりに書かせてくださいね。

たしかに能力に遺伝というものは働いているでしょう。 それが単に得て不得手と言う一般的なものから、極端に例としてIQは低いけどある一種のことにおいてはコンピューターも顔負け、と言う人もいますね。 数字に関してならすば抜けて記憶力がいいとか、単語力は抜群とか。

しかし、能力もそうですが、苦手・得意も遺伝もあるでしょうが、学説的にも証明されているように、生まれ持ったものだけが人...続きを読む

Qchar c = 'a'; char h[1] = c; エラー

char型のものを char[]型に代入したいです。

char c = 'a';
char h[1] = c;

として、

h[0] は \x97
h[1] は \x00

にしたいです。
型変換の方法を教えてください。

Aベストアンサー

とりあえず、確認を。

C では、'a'の表す値は 0x61 = 97 であって、 \x97 ではないと思います。
(\xnnn を、十六進数の意味に取りましたが、あってますでしょうか?
この場合、C では通常 0xnnn のように書くと思います。)
ので、 これは 0x61 のことをおっしゃっていると仮定します。

> char h[1] = c;
っと、これではたぶんコンパイルが通りません。

char h[1] = {c};

のように、配列であることを明示して代入してください。
この式では、前半でh という名前の、*長さ1 の* char の配列変数を確保します。
後半で、その中を初期化しています。
添え字は 0 からはじまるので、この場合、h[0] に c の内容が代入されます。
1個しか場所を確保していないので、 h[1] の位置のデータは内容が不定です。
文字列として h を扱いたいのであれば、 C の文字列には終端として 0 が必要ですから、
char c = 'a';
char h[2] = { c, '\0'};

のような書き方が必要になります。
これで、お望みのデータになると思います。

とりあえず、確認を。

C では、'a'の表す値は 0x61 = 97 であって、 \x97 ではないと思います。
(\xnnn を、十六進数の意味に取りましたが、あってますでしょうか?
この場合、C では通常 0xnnn のように書くと思います。)
ので、 これは 0x61 のことをおっしゃっていると仮定します。

> char h[1] = c;
っと、これではたぶんコンパイルが通りません。

char h[1] = {c};

のように、配列であることを明示して代入してください。
この式では、前半でh という名前の、*長さ1 の* char の配列変数...続きを読む

Q英語で「ja」を「ヤ」と発音することもある?

Jacobという人名は「ヤコブ」と「ジェイコブ」という二通りの読み方がありますよね。
調べたところ、前者はヨーロッパ式の読み方で、後者は英語式の読み方のようなのですが、英語圏の国で「ja」というスペルを「ヤ」と発音することもあるのでしょうか?
(例:Japanはジャパンですが、読もうと思えば「ヤパン」と発音することも可能なのですか?)

英米人の名前で「Jacobさん」という人がいれば、ほぼ例外なく「ジェイコブさん」とお読みするのでしょうか?
他にも「ja」をジャでなく「ヤ」で発音する英単語(人名に限らず)はありますか?

Aベストアンサー

「Jacob」は英語では必ず「ジェイコブ」(もう少し原音に近づけると「ヂェィカブ」)と発音します。たとえ、それが聖書に出てくるヤコブのことでも。
(英語の「j」は、舌を上顎につけない「ジ」よりも、上顎につける「ヂ」の表記で書き表す方が原音をより具体的に表しているのですが、ここでの回答にはそぐわないので、詳しくは述べません。)

「Ja」を「ヤ」で発音する英単語は、ごく少数ですがあります。
たぶん、いちばんよく目にするのは「hallelujah」(発音は『ハレルーヤ』)だと思います。
ほかには、次のような例もあります。
・デンマークの作家「ヤコブセン(Jacobsen)」
・ドイツの心理学者「ユング(Jung)」
・ドイツの青年貴族を意味する「ユンカー(junker)」
ご推察できるように、ヨーロッパ大陸北部の人名や階級名、地名がほとんどです。

なお、スペイン語では、「ja」を、喉を狭めて息を吐き出す方法で発音し、「ハ」の音に近く聞こえます。
したがって、スペイン語由来の外来語では、「ja」を「ヂャ」とも「ヤ」とも読まない例があります(以下『』内が英語での発音です)。
・San Jose『サン・ホゼィ』:カリフォルニア南部の都市。
・San Jose『サン・ホーセ』:コスタリカの首都。
・Marijuana『マリワーナ』:マリファナ。
・Jota『ホタ』:ホタ(スペインの伝統舞踊のひとつ)。

「Jacob」は英語では必ず「ジェイコブ」(もう少し原音に近づけると「ヂェィカブ」)と発音します。たとえ、それが聖書に出てくるヤコブのことでも。
(英語の「j」は、舌を上顎につけない「ジ」よりも、上顎につける「ヂ」の表記で書き表す方が原音をより具体的に表しているのですが、ここでの回答にはそぐわないので、詳しくは述べません。)

「Ja」を「ヤ」で発音する英単語は、ごく少数ですがあります。
たぶん、いちばんよく目にするのは「hallelujah」(発音は『ハレルーヤ』)だと思います。
ほかには、...続きを読む

Q{x = x>y ? x:y; return x;}

#include <iostream>
using namespace std;

inline int max(int x, int y){x = x>y ? x:y; return x;}

int main()
{
int num1, num2, ans;

cout << "2つの整数を入力して。\n";
cin >> num1 >> num2;

ans = max(num1, num2);

cout << "最大値は" << ans << "です。\n";

return 0;
}
の{x = x>y ? x:y; return x;}の部分の意味が解りません。

Aベストアンサー

inline int max(int x, int y){x = x>y ? x:y; return x;}
これを普通に関数で書くと

int max(int x, int y)
{
x = x>y ? x:y;
return x;
}

です。

x = 部分は右辺の結果が代入されます。これはわかりますよね。
x>y?x:y;
と書くと?より左にある条件式を判定し、その結果が真である場合は:で区切られた左側の値を、偽である場合は右の値を帰します。
x>yが真であればxを、偽であればyを返します。
それが、左辺値xに代入され、関数の戻り値として帰ります。

従って、2つの値をこの関数に入れると、大きいほうの値が帰ることになります。

Q“B1F”は和製英語か

 日本の繁華街や大きなスーパー、デパートなどで、地下一階のことが、ほぼ例外なく“B1F”と略記されています。疑問に思って、この“B”とは何かを調べたら、“basement”のbなんですよね。「地下一階」は、正確には、“the first basement”と言うと思うのですが、それでは、“B1F”というのは、和製英語で、英語としては間違いなのでしょうか。また、それならば、「地下一階」は、正しい英語では、どのように略記されるのでしょうか。“1st B.”とでもなるのでしょうか。ご存じの方、よろしくご教示お願い致します。

Aベストアンサー

B1F という表現は、例えば日本のデパートの英文説明で fist basement floor(B1F)のように書いてあったりしますが、これはエレベーターや階案内にB1Fとよく書いてあるので、それもいしきしているかもしれませんが、米国では見たことないです。

米国で圧倒的に多いのは levelを使った表現です。Basement Level 1, B-1 Lebel, B1 Level とか。エレベータ内などにこう書いてあります。また、建物図面などでは BASEMENT LEVEL 1 といった表現。

他には、Basement Floor 1, Fist Basement Floorなどもでてきますね。表示には後者は長すぎるかもしれませんね。

地下一階までの建物だったら、floorとかlevelを使わなくても、例えば、His office is located in the basement (of the ABC building). などといえます。

Qfor( ; ti >= 0; ti--, ci++)

C言語のループの表記のことです

for ( ; ti >= 0; ti- -, ci++)
この意味がわかりません
自分なりに解釈すると「;ti >= 0」から始まって「 ci++ 」を繰り返しながら「 ti- - 」になるまで繰り返す、というような感じです

「;ti >= 0」から始まるとはどういう意味でしょうか?
「 ti- - 」になるまでとは???

このソースが書かれているHPです
http://www.rs.kagu.tus.ac.jp/infoserv/j-siken/H12a2/pm11.html
52行目になります


わかる方がいらっしゃったら教えてください、お願いします

Aベストアンサー

for() の 「初期設定式」「継続条件式」「再設定式」の区切りは、; です。
ですからこの場合、
初期設定式:なにもない(特に初期設定不要)
継続条件式: ti >= 0
再設定式: ti--, ci++
です。

さらに、再設定式に出てくる表現は、「コンマ演算子」といいまして、おおざっぱに言えば、コンマで区切られた式を順番に実行という意味です。
(関数の引数に現れるコンマとは別の意味です)

初期設定式のない for() は、すでにあるところから処理を継続する場合によく使われます。たとえば、

s = 0;
for (i = 0; x[i] == 0; i++); // x[i] の先頭部分の0の要素を捨てて
for(; x[i] > 0; i++)
s += x[i]; // 「そのあと」の正の部分が継続する間足し込む
という場合、

また、再設定式は、

for(i = 0, j = 10; src[i] != 0; i++, j--)
dest[j] = src[i];
のように、二つ(以上)のものを変化させたい場合。
この例では、初期設定式も、コンマ演算子を使って、2つの初期化を行っています。

for() の 「初期設定式」「継続条件式」「再設定式」の区切りは、; です。
ですからこの場合、
初期設定式:なにもない(特に初期設定不要)
継続条件式: ti >= 0
再設定式: ti--, ci++
です。

さらに、再設定式に出てくる表現は、「コンマ演算子」といいまして、おおざっぱに言えば、コンマで区切られた式を順番に実行という意味です。
(関数の引数に現れるコンマとは別の意味です)

初期設定式のない for() は、すでにあるところから処理を継続する場合によく使われます。たとえば、

s = 0;
...続きを読む


人気Q&Aランキング

おすすめ情報