
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングのペーパーテスト 実行結果を表示せよ #include <stdio.h> int h 1 2022/07/09 15:27
- C言語・C++・C# プログラミングのペーパーテスト 実行結果がどのように表示されるか答えよ #include <stdi 1 2022/07/09 14:27
- XML XML同じ名前の要素を自動で集約するツール 1 2022/04/11 09:21
- HTML・CSS 全部のアクセスを指定したページに転送させたい 2 2022/06/28 16:33
- Windows 10 バッチファイルの記述法とルールについてアドバイスをお願いいたします。 1 2022/04/13 10:50
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- JavaScript JavaScriptで「〇以上▲まで」の書き方 1 2022/07/20 14:44
- その他(プログラミング・Web制作) pythonのcondaコマンドの仕様について 2 2022/06/24 00:13
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
このQ&Aを見た人はこんなQ&Aも見ています
-
既定のコンストラクタがありません。というエラーについて
C言語・C++・C#
-
静的でないメンバ関数の呼び出しが正しくありません
C言語・C++・C#
-
C++ protectedにアクセス不可
C言語・C++・C#
-
-
4
【C++】関数ポインタの使い方
C言語・C++・C#
-
5
適切な変換関数が存在しない???
C言語・C++・C#
-
6
char*を初期化したいのですが
C言語・C++・C#
-
7
初期化の対義語(反対語)はなんですか?
日本語
-
8
1 つ以上の複数回定義されているシンボルが見つかりました
C言語・C++・C#
-
9
std::stringからLPCWSTR型への変換
C言語・C++・C#
-
10
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
11
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
12
C++にてtemplateで受け取った任意の型の変数が何型であるかを判定したい
C言語・C++・C#
-
13
構文エラー;"が型の前にありませんとは、どうしたら解決できるのですか。"
C言語・C++・C#
-
14
cout と cerrの違い
C言語・C++・C#
-
15
C++言語で、構造体のコピーは可能(しても良い)のでしょうか?
C言語・C++・C#
-
16
ダイアログの表示位置の保存
C言語・C++・C#
-
17
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
18
クラスのアドレスを引数として渡したい
C言語・C++・C#
-
19
外部依存関係について
C言語・C++・C#
-
20
deleteで開放するとエラーになる原因がわからない
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
既定のコンストラクタがない?
-
VBA チェックボックスをオーバ...
-
C#でのjsonの扱い方を教えてく...
-
(UWSC) 「#32770」の意味わかり...
-
FriendとPublicの違い。。。
-
ダイアログ表示時にチェックボ...
-
オブジェクト指向 集約の実装...
-
イベントにAddHandlerされてい...
-
DLLの作り方および使い方について
-
WebBrowserコントロールを継承...
-
特定のビューへのポインタ取得...
-
DataContextについて
-
Serialize で困ってます!!
-
MFC モードレスDlgについて
-
関数のプロパティ
-
CDocumentの取得方法について
-
C++ protectedにアクセス不可
-
【ASP.NET】 独自で作成したク...
-
MFCのCListCtrlでスクロールを検出
-
DateAdd関数について質問があり...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
イベントにAddHandlerされてい...
-
ダイアログ表示時にチェックボ...
-
エディットコントロールでEnter...
-
(UWSC) 「#32770」の意味わかり...
-
C++ protectedにアクセス不可
-
クラスのアドレスを引数として...
-
エディットコントロールのイベ...
-
【ASP.NET】 独自で作成したク...
-
MFCのドラッグ&ドロップについて
-
オーバーライド関数の呼び出し...
-
C++/CLIからC++の呼び出しで例外
-
ボタンのオーナードローについて
-
C++で継承元のクラスの代入演算...
-
MFCアプリのコマンドラインでパ...
-
DLLからEXEのクラスを呼び出す...
-
MFCのCListCtrlでスクロールを検出
-
オブジェクト指向 集約の実装...
-
ダイアログクラスのコントロー...
おすすめ情報