[解決済み] C++ Void関数とファイルストリームエラー
2022-03-04 11:34:47
質問
入力ファイルを受け取り、それを整理していくつかの値を計算するコードを書こうとしています。しかし、getName関数で問題を抱えています。getメンバ関数を使用して、参照パラメータで呼び出したものに姓と名を割り当て、-1が読み込まれた場合は入力ファイルの文字を合計することになっています。以下は、このコードに対するエラー引数です。
main.cpp:7:14: error: variable or field 'getName' declared void
main.cpp:7:14: error: 'ifstream' was not declared in this scope
main.cpp:7:24: error: 'shoppingCartInput' was not declared in this scope
main.cpp:7:43: error: 'string' was not declared in this scope
main.cpp:7:51: error: 'firstname' was not declared in this scope
main.cpp:7:62: error: 'string' was not declared in this scope
main.cpp:7:70: error: 'lastname' was not declared in this scope
main.cpp:102:50: error: 'getName' was not declared in this scope
以下はそのコードです。
#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>
#include <cctype>
void getName(ifstream& shoppingCartInput, string& firstname, string& lastname);
using namespace std;
int main()
{
// declerations
string infile_name = "";
string shopper = "";
string firstname ="";
string lastname = "";
int quantity;
double price = 0.0, leastExpPrice = 0, mostExpPrice = 0;
string item, leastExpItem, mostExpItem;
double totalCost = 0.0;
//1) Open Your File
cout << "please enter the name of the input file:";
cin >> infile_name;
cout << "\n";
ifstream shoppingCartInput;
ofstream shoppingCartOutput;
shoppingCartInput.open(infile_name.c_str());
if(shoppingCartInput.fail( )) {
cout << "Input file opening failed.\n";
exit(1);
}
shoppingCartOutput.open("output_file.dat");
if(shoppingCartOutput.fail( )) {
cout << "Output file opening failed.\n";
exit(1);
}
//2) Read the first line
shoppingCartInput >> quantity >> price >> item;
//printing the line to the console (properly organized)
shoppingCartOutput.setf(ios::fixed);
shoppingCartOutput.setf(ios::showpoint);
shoppingCartOutput.setf(ios::left);
shoppingCartOutput.width(15);
shoppingCartOutput << item << " ";
shoppingCartOutput.setf(ios::right);
shoppingCartOutput.width(3);
shoppingCartOutput << quantity << " ";
shoppingCartOutput.setf(ios::right);
shoppingCartOutput.width(6);
shoppingCartOutput.precision(2);
shoppingCartOutput << price << " ";
shoppingCartOutput.setf(ios::right);
shoppingCartOutput.width(7);
shoppingCartOutput.precision(2);
shoppingCartOutput << (quantity * price) << endl;
//set it as the most expensive
//set it as the least expensive
leastExpPrice = price;
leastExpItem = item;
mostExpPrice = price;
mostExpItem=item;
//initialize total cost to get the cost of the first line of data
totalCost = (quantity * price);
//3) Read until the end of the file
while(!(shoppingCartInput.eof())) {
while(quantity != -1) {
shoppingCartInput >> quantity >> price >> item;
//printing the line to the console (properly organized)
shoppingCartOutput.setf(ios::fixed);
shoppingCartOutput.unsetf(ios::right);
shoppingCartOutput.setf(ios::showpoint);
shoppingCartOutput.setf(ios::left);
shoppingCartOutput.width(15);
shoppingCartOutput << item << " ";
shoppingCartOutput.setf(ios::right);
shoppingCartOutput.width(3);
shoppingCartOutput << quantity << " ";
shoppingCartOutput.setf(ios::right);
shoppingCartOutput.width(6);
shoppingCartOutput.precision(2);
shoppingCartOutput << price << " ";
shoppingCartOutput.setf(ios::right);
shoppingCartOutput.width(7);
shoppingCartOutput.precision(2);
shoppingCartOutput << (quantity * price) << endl;
if(price < leastExpPrice) {
leastExpPrice = price;
leastExpItem = item;
}
if(price > mostExpPrice) {
mostExpPrice = price;
mostExpItem=item;
}
totalCost += (quantity * price);
}
if (quantity == (-1)) {
string first = "";
string last = "";
getName(shoppingCartInput, firstname, lastname);
shopper = firstname + " " + lastname;
shoppingCartOutput << "\ncheapest item = " << leastExpItem <<
endl;
shoppingCartOutput << "most expensive item = " << mostExpIte <<
endl;
shoppingCartOutput << "total cost = " << totalCost << endl;
shoppingCartOutput.unsetf(ios::right);
shoppingCartOutput.setf(ios::left);
shoppingCartOutput << "shopper = " << shopper;
}
}
shoppingCartInput.close();
shoppingCartOutput.close();
return 0;
}
void getName(ifstream& shoppingCartInput, std::string& firstname, std::string&
lastname)
{
char letter;
do {
shoppingCartInput.get(letter);
firstname += letter - 1;
} while (letter != ',');
do {
shoppingCartInput.get(letter);
lastname += letter;
} while (letter != '\n' || letter != 'r');
}
解決方法は?
を変更します。
void getName(ifstream& shoppingCartInput, string& firstname, string& lastname);
using namespace std;
になります。
using namespace std;
void getName(ifstream& shoppingCartInput, string& firstname, string& lastname);
関連
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み] なぜテンプレートはヘッダーファイルでしか実装できないのですか?
-
[解決済み] Mockitoでvoidメソッドをモックする方法
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
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++でint型に無限大を設定する
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】C++の余分な資格エラー
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の