
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
ついでにどうするかというと, 「宣言に見えなければいい」ので, 例えば
・キャストする: (void)Hoge(boo); とか static_cast<void>(Hoge(boo)); など
・捻ってみる: 0, Hoge(boo); など
という方針はあります.
No.5
- 回答日時:
クラスも構造体も同じですが, デフォルトコンストラクタは「ユーザ定義のコンストラクタがない場合」に限りコンパイラが暗黙に提供します>#3.
今の場合はユーザ定義のコンストラクタ Hoge::Hoge(Boo &) があるので, デフォルトコンストラクタを暗黙に定義することはしません. にもかかわらず (図らずも) デフォルトコンストラクタで初期化しようとしたのでエラーになっています.
No.4
- 回答日時:
># 構造体もクラスの宣言と同じように扱われるのは驚きでした。
構造体メンバの宣言部にアクセス指定子を拡張し、コンストラクタやデストラクタなど、色々な拡張を施したしたのが「クラス」ですから、当然、構造体にもコンストラクタやデストラクタが使えます。
共用体も構造体の拡張ですから、共用体にも同様の事が言えます。
構造体、共用体、クラスオブジェクトが「メモリ上で、どのように存在しているか?」を、つまり「メモリ上の実装」を考えれば「どれも同じような物」と気付く筈です。
No.3
- 回答日時:
#1です。
>#2 とても勉強になりました。
>> 「error C2512: 'Hoge' : クラス、構造体、共用体に既定のコンストラクタがありません。 」
私のせいで話が間違った方向に行った気がします。
多分、質問の意図は2重定義になることではなく、なぜコンストラクタがないのか?、ということだったのかもしれません。
structもメンバがpublicなclassとして扱われるが、
classとして宣言した場合と異なり
暗黙のコンストラクタ・デストラクタは定義されない
ってのが質問の答えになるのですかね。
No.2
- 回答日時:
C++ において構造体は (デフォルトの) アクセス指定子がすべて public であるようなクラスです>#1. だからコンストラクタやデストラクタも定義できます (例えば std::pair はコンストラクタをもつ構造体です) し, その気になれば他のクラスや構造体から導出することもできます.
で, このように式文と (かっこが余計についた) 宣言が構文上区別できなくなることがあり, その場合には宣言として扱うことになっています (6.8 Ambiguity resolution). だから, ここでは「Hoge::Hoge(Boo &) を呼び出す式文」としてではなく, 「Hoge 型の変数 boo を宣言する」と解釈しなければなりません.
なお, 同じようにコンストラクタ呼び出しを使って変数を定義しようとすると「関数の宣言」と解釈されることもあります.
No.1
- 回答日時:
試してみました。
Hoge(boo)は、 booを引数にHoge(Boo&)コンストラクタを呼ぶのではなく
Hoge boo; のように Hoge型の boo オブジェクトを構築する意味です。
エラーメッセージを全て読めば
booが二重定義されていると
表示されているはずです。
# 構造体もクラスの宣言と同じように扱われるのは驚きでした。
# コンストラクタもデストラクタも定義してみると、
# ちゃんと機能していたので驚きです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
既定のコンストラクタがありません。というエラーについて
C言語・C++・C#
-
静的でないメンバ関数の呼び出しが正しくありません
C言語・C++・C#
-
【C++】関数ポインタの使い方
C言語・C++・C#
-
-
4
cout と cerrの違い
C言語・C++・C#
-
5
C++ protectedにアクセス不可
C言語・C++・C#
-
6
1 つ以上の複数回定義されているシンボルが見つかりました
C言語・C++・C#
-
7
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
8
deleteで開放するとエラーになる原因がわからない
C言語・C++・C#
-
9
C++言語で、構造体のコピーは可能(しても良い)のでしょうか?
C言語・C++・C#
-
10
外部依存関係について
C言語・C++・C#
-
11
クラスのアドレスを引数として渡したい
C言語・C++・C#
-
12
複数の変数を宣言する時、同時に初期化?できないでしょうか?
Java
-
13
読み込み中にアクセス違反が発生しました、と出ます。これを回避することは
C言語・C++・C#
-
14
適切な変換関数が存在しない???
C言語・C++・C#
-
15
コマンドプロンプトのエラーについて
その他(パソコン・周辺機器)
-
16
cout関数を使っているのですが,画面に出力されません。
C言語・C++・C#
-
17
char*を初期化したいのですが
C言語・C++・C#
-
18
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
19
ネットワークにつながっているかの確認
UNIX・Linux
-
20
LPSTR型の初期化について
C言語・C++・C#
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DLLファイルの逆コンパイラにつ...
-
変数のスコープ
-
gccを行ってもexeファイルが生...
-
C++でデスクトップGUIアプリ開...
-
C言語 配列と関数の練習問題
-
終端記号、非終端記号とは
-
C言語 バッファについて。
-
c言語でイベントフラグを使った...
-
int16_t の _t は何?
-
C言語 入力した値から0までの数...
-
プログラミング 2つの整数を読...
-
【C言語】全角文字の配列を、全...
-
C言語の関数のextern宣言
-
C言語 関数、変数の宣言について
-
Cのプログラムからアクセスでき...
-
逆コンパイルと逆アセンブルの...
-
コンソールアプリを作成するの...
-
0 == False はいいけど
-
Linuxでの開発環境構築や設定の...
-
c言語
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA チェックボックスをオーバ...
-
FriendとPublicの違い。。。
-
イベントにAddHandlerされてい...
-
既定のコンストラクタがない?
-
ダイアログ表示時にチェックボ...
-
(UWSC) 「#32770」の意味わかり...
-
【ASP.NET】 独自で作成したク...
-
エディットコントロールでEnter...
-
クラスのアドレスを引数として...
-
WindowsAPIのリストビューの...
-
エディットコントロールのイベ...
-
MFCアプリのコマンドラインでパ...
-
ボタンのオーナードローについて
-
正規表現 [^/]+ の意味を教えて
-
C++ protectedにアクセス不可
-
このコンパイルエラーの意味に...
-
MFCのドラッグ&ドロップについて
-
C# 別プロジェクトのフォームを...
-
オーバーライド関数の呼び出し...
-
MFCのCListCtrlでスクロールを検出
おすすめ情報