[解決済み] error: 'const int' 型の式からの 'int&' 型の参照の無効な初期化
2022-02-07 09:09:43
質問
のコードについて、関係ない質問です。 この質問 以下のテンプレート関数について。
template <class T>
class Object : public Container {
public:
T& object;
Object(const T& obj) : object(obj) {}
};
これは、コンストラクタを呼び出すコードです。
template <class T>
void Array::add_element(const T& element)
{
vec.push_back(new Object<T>(element));
}
このコードは問題なくコンパイルされますが、すぐに
main
を呼び出すと
Array array;
int i = 3;
array.add_element(i);
コンパイラの警告が出るのですが。
error: invalid initialization of reference of type 'int&' from expression of type 'const int'
.
それはどういうことですか?を渡したのですが
int
を入れてください。自動的に
const int&
ということですか?なぜコンパイラは文句を言うのでしょうか?
解決方法を教えてください。
obj
は const 参照です。
object
は非恒久的な参照である。
const参照からconstでない参照を初期化することはできません。そうすると、そもそもconst参照を持つ意味がなくなってしまうからです。
のインスタンスを作成したい場合
Object
を変更できるようにすることです。
int
の場合、コンストラクタは非恒等式参照を受け取る必要があります。そうでない場合は、データメンバは const 参照であるべきです。
いずれにせよ、このような使い方はトラブルの元です。
new
を使用して、データメンバとして参照を持つオブジェクトを割り当てます。それは
あなたの
を確実に削除することが問題です。
Object
前に
i
がスコープ外に出るようにする(あるいはとにかく
Object
は、そのメンバーである
object
の後に
i
がスコープ外になる。
関連
-
[解決済み】C++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】Enterキーを押して続行する
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み】なぜ、constでない参照は一時的なオブジェクトにバインドできないのでしょうか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較