[解決済み】削除された関数であるため、関数を参照できない
質問
こんにちは、私は本からC++を学習しており、以下の演習問題に取り組んでいます。
istreamを受け取り、返す関数を書いてください&。この関数は、ファイルの終端にぶつかるまでストリームを読む必要があります。この関数は、読み込んだ内容を標準出力に出力しなければなりません。ストリームを返す前に、ストリームを有効な状態にリセットしてください。
#include "stdafx.h"
#include <iostream>
#include <istream>
#include <string>
#include <string.h>
#include <list>
#include <vector>
#include <fstream>
std::istream ReadFile(std::istream &iStream)
{
std::string word;
while (iStream >> word)
{}
std::cout << "I read value " << word << std::endl;
iStream.setstate(std::ios::goodbit);
return iStream;
}
int _tmain(int argc, _TCHAR* argv[])
{
ReadFile(std::cin);
system("pause");
return 0;
}
上記は私の試みですが、私は "return iStream" の行でエラーになっています。
Error1 error C2280: 'std::basic_istream<char,std::char_traits<char>>::basic_istream(const std::basic_istream<char,std::char_traits<char>> &)' : attempting to reference a deleted function
2 IntelliSense: function "std::basic_istream<_Elem, _Traits>::basic_istream(const std::basic_istream<_Elem, _Traits>::_Myt &) [with _Elem=char, _Traits=std::char_traits<char>]" (declared at line 77 of "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\istream") cannot be referenced -- it is a deleted function
私は、これらのエラーが何であるかをよく知りません。私は、あなたがものを削除することができることを知っていますが、私はまだ本の中でそのトピックに取り組んでいません。私が知る限りでは、istreamファイルには全く触れていません。どなたか教えてください。
ありがとうございます。
解決方法は?
を返すことはできません。
istream
はコピーできないので、値で指定します。
コピー不可のため、コピーコンストラクタが削除されており(コピー不可を強制するため)、それが診断の直接的な技術的原因となっています。
そこで、代わりに
std::istream ReadFile(std::istream &iStream)
...する
std::istream& ReadFile(std::istream& iStream)
その他のニュースとして.
の代わりに
#include "stdafx.h"
は、Visual Studio のプロジェクト設定でプリコンパイルされたヘッダをオフにするだけです。
これにより、ヘッダーのインクルージョンに関しても、より標準に準拠した動作が得られます。
もしそうしないのであれば、インクルードをスキップする警告が出た場合、ハードコンパイル・エラーになるようにプロジェクトを構成してください。
の代わりに
iStream.setstate(std::ios::goodbit);
...する
istream.clear();
ポータブルではないマイクロソフトの怪物の代わりに
int _tmain(int argc, _TCHAR* argv[])
標準装備
int main()
またはC++11のtrailing return type構文で。
auto main() -> int
の代わりに
system("pause");
でプログラムを実行するだけです。
Ctrl
+
F5
をVisual Studioで実行します。または、最後の右中括弧にブレークポイントを設定します。
main
と入力し、デバッガで実行します。または、コマンドラインから実行してください。
演習の定式化
" は、ファイルの終端にぶつかるまでストリームを読み込む必要があります。
はあいまいですが、とにかく
言葉
のように、ストリームの空白を忠実に再現することはできません。ストリームの内容をより正確に再現するには、次のように読みます。
文字
を1文字ずつ、あるいは
getline
)
ライン
を行単位で表示します。あるいは、この作業のための特別なメカニズム、すなわち、出力された
読み取りバッファ
これは、1つの小さなステートメントですべてを行うものです。
最後に、これらのヘッダーはすべて必要ありません。必要なのは
<iostream>
そして、もしあなたが行を読むことを選択した場合、さらに
<string>
. また
return 0;
の末尾にある
main
というのも、これがデフォルトだからです。
関連
-
[解決済み】coutはstdのメンバではない
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】'cout'は型名ではない
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】Enterキーを押して続行する
最新
-
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++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み】デバッグアサーションに失敗しました