
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#
-
cout と cerrの違い
C言語・C++・C#
-
-
4
C++ protectedにアクセス不可
C言語・C++・C#
-
5
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
6
【C++】関数ポインタの使い方
C言語・C++・C#
-
7
cout関数を使っているのですが,画面に出力されません。
C言語・C++・C#
-
8
char*を初期化したいのですが
C言語・C++・C#
-
9
1 つ以上の複数回定義されているシンボルが見つかりました
C言語・C++・C#
-
10
deleteで開放するとエラーになる原因がわからない
C言語・C++・C#
-
11
外部依存関係について
C言語・C++・C#
-
12
C++でfriendクラスにしているのにprivateメンバにアクセスできない
C言語・C++・C#
-
13
C++言語で、構造体のコピーは可能(しても良い)のでしょうか?
C言語・C++・C#
-
14
DLL参照時に指定されたモジュールが見つかりません。(HRESULT からの例外 0x8007007E) が発生してしまう。
C言語・C++・C#
-
15
左側がクラス、構造体、共用体、ジェネリック型への
C言語・C++・C#
-
16
読み込み中にアクセス違反が発生しました、と出ます。これを回避することは
C言語・C++・C#
-
17
多重定義が起きている?--lnk2005エラー:VC++
C言語・C++・C#
-
18
CString から LPCTSTRの型に変換
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSSが全く分かりません、お助け...
-
DLLファイルの逆コンパイラにつ...
-
プログラム言語について c言語...
-
C言語について(初心者)
-
visual studio 2022でのC#プロ...
-
プログラミングc++を全く分か...
-
今ってプログラミング言語は何...
-
逆コンパイルと逆アセンブルの...
-
次の日本語の意味を教えて下さい
-
int16_t の _t は何?
-
Windows Formアプリからコンソ...
-
最初に聞かれたこと
-
Cのプログラムからアクセスでき...
-
プログラミング言語についてc++...
-
C#でTreeViewのCheckBoxのサイ...
-
c#のTLS1.2での通信について
-
プログラマー達は何故、プログ...
-
PIC12F1822でLED調光器を作りたい
-
C言語 関数、変数の宣言について
-
あってる
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
既定のコンストラクタがない?
-
FriendとPublicの違い。。。
-
(UWSC) 「#32770」の意味わかり...
-
ダイアログ表示時にチェックボ...
-
イベントにAddHandlerされてい...
-
エディットコントロールでEnter...
-
オーバーライド関数の呼び出し...
-
このコンパイルエラーの意味に...
-
【ASP.NET】 独自で作成したク...
-
MFC モードレスDlgについて
-
[MFC] CWnd::MessageBoxの警告...
-
ボタンのオーナードローについて
-
MessageBoxを継承したい
-
ダイアログクラスのコントロー...
-
vba sendKeysを送る相手のソフ...
-
エディットコントロールのイベ...
-
Delphi6 DLL内でのメモリ共有(?)
-
個々の関数について継承してい...
-
privateなメンバ関数をテストす...
-
WindowsAPIのリストビューの...
おすすめ情報