[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない
2022-01-29 20:39:52
質問
課題の一部として、ヒープ上に割り当てられたメモリを使用するVector3Dクラスを作成するように求められました。私は、以下のコンストラクタを持つVector3DHeapクラスを持っています。
Vector3DHeap::Vector3DHeap(float& x, float& y, float& z)
{
this->x = &x;
this->y = &y;
this->z = &z;
}
単位ベクトルを取得する場合、以下のようにできると思っていたのですが。これは、エラーメッセージ "引数リストに一致するコンストラクタのインスタンスはありません、引数タイプは (float, float, float) です。
Vector3DHeap* Vector3DHeap::getUnitVector()
{
float m = *getMagnitude();
return new Vector3DHeap((*x / m), (*y / m), (*z / m));
}
a、b、cの3つのfloat変数を定義して、これらをコンストラクタに渡すと、コンパイラは満足します。上のコードのどこが問題なのでしょうか?
Vector3DHeap* Vector3DHeap::getUnitVector()
{
float m = *getMagnitude();
float a, b, c;
a = *x / m;
b = *y / m;
c = *z / m;
return new Vector3DHeap(a, b, c);
}
ありがとうございました。 ジョージ
解決方法は?
最初のバージョンでのあなたの問題は、コンパイラがバグを防ごうとしていることです。
あなたの問題点は セカンド のバージョンは、あなたがコンパイラーを出し抜き、バグを作り出すことに成功したということです。
コンストラクタで
float
の値が参照渡しされます。2 番目のバージョンでは、ローカル変数への参照でコンストラクタを呼び出すようにしたので
float a, b, c;
のインスタンスを作成しました。
Vector3DHeap
を参照する。しかし
getUnitVector
が返されると、それらの変数はもう存在しなくなり
Vector3DHeap
はダングリングリファレンスになった。
解決策は、ポインタを
Vector3DHeap
または、パラメータのコピーを作成することです。
Vector3DHeap::Vector3DHeap(float x, float y, float z)
{
this->x = new float(x);
this->y = new float(y);
this->z = new float(z);
}
ただし、保存されているフロートをきちんと削除してください。
関連
-
[解決済み】 unsigned int vs. size_t
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む
-
[解決済み] C#でベースコンストラクタを呼び出す
-
[解決済み] ベースクラスのコンストラクタを呼び出す際のルールは?
-
[解決済み] React / React Nativeでコンストラクタを使用する場合とgetInitialStateを使用する場合の違いとは何ですか?
-
[解決済み】なぜC++コンパイラはoperator==とoperator!=を定義しないのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。