Why would this happen??
I have added a new function into my code, and this has produced some odd errors in another functions, like advising that some variables have not been declared when they have.
I am completly lost, can anyone please advise as to what is going wrong?
The new function I have added is:
void delete_data( StockItem* );
Compile log is as follows:
Compiler: Default compiler
Executing g++.exe...
g++.exe "D:\cpp\rearange.cpp" -o "D:\cpp\rearange.exe" -g3 -O0 -I"D:\data\c++\Dev-Cpp\include\c++" -I"D:\data\c++\Dev-Cpp\include\c++\mingw32" -I"D:\data\c++\Dev-Cpp\include\c++\backward" -I"D:\data\c++\Dev-Cpp\include" -L"D:\data\c++\Dev-Cpp\lib"
D:/cpp/rearange.cpp: In function `void delete_data(StockItem*)':
D:/cpp/rearange.cpp:135: parse error before `{' token
D:/cpp/rearange.cpp:140: `ctr' undeclared (first use this function)
D:/cpp/rearange.cpp:140: (Each undeclared identifier is reported only once for
each function it appears in.)
D:/cpp/rearange.cpp:140: `num_items' undeclared (first use this function)
Execution terminated
original working code:
Code:#include <iostream> #include <fstream> #include <conio.h> //for getch() using namespace std; const int NUM_OF_ITEMS = 125; struct StockItem { int code; char desc[20]; float price; }stock[NUM_OF_ITEMS]; /*struct bill_line { StockItem product; float weight; float cost; }; struct bill { bill_line items[20]; int num_lines; };*/ void cls(void) { system("cls"); } //function designed to aid portability. void disp_menu( void ); StockItem enter_data( void ); void see_stock( StockItem*, int ); void writeToDisk( StockItem*, int ); int readFromDisk( StockItem* ); int main() { int ans, ctr; int num_items = 0; do { do { disp_menu(); cin >> ans; } while ((ans<1) || (ans>6)); switch (ans) { case 1: stock[num_items] = enter_data(); num_items++; break; case 2: see_stock(stock, num_items); break; case 3: writeToDisk( stock, num_items ); // NOT writing the whole array to disk. break; case 4: num_items = readFromDisk( stock ); // setting the number items we read from file break; default: break; } }while (ans!=5); return 0; } void disp_menu() { cout << "\n*** The Corner Shop ***\n\n"; cout << "Select an option: \n\n"; cout << "\t1. Enter new stock item " << endl; cout << "\t2. See current stock " << endl; cout << "\t3. Save stock to disk " << endl; cout << "\t4. Load stock from disk " << endl; cout << "\t5. Exit \n" << endl; cout << "option> "; } StockItem enter_data() { StockItem stock_item; cls(); cout << "\n\nWhat is the product code: "; cin >> stock_item.code; cout << "What is the product description: "; cin.ignore(); cin.getline(stock_item.desc, 20); cout << "What is the product price: "; cin >> stock_item.price; cls(); return (stock_item); } void see_stock(StockItem stock[NUM_OF_ITEMS], int num_items) { int ctr; cls(); cout << "\n\nHere is the stock listing:\n\n"; for (ctr = 0; ctr < num_items; ++ctr) { cout << "Item " << ctr+1 << endl; cout << "Product Code: " << stock[ctr].code << endl; cout << "Product Description: " << stock[ctr].desc << endl; cout << "Price: " << stock[ctr].price << endl; cout << "------------------------------------------------\n"; } cout << "\nHit any key to continue.....\n"; getch(); cls(); } void writeToDisk( StockItem* array, int numOfItems ) { ofstream outfile( "items.txt" ); if (outfile.bad()) { cout << "\n*** Error opening file ***\n"; } for( int index = 0; index < numOfItems; index++ ) outfile.write( (char*)&array[index], sizeof(StockItem) ); cls(); } int readFromDisk( StockItem* array ) { int numOfItems = 0; ifstream infile( "items.txt" ); if (infile.bad()) { cout << "\n*** Error opening file ***\n"; } StockItem tmp_stockItem; // read from the file until we reach EOF while( infile.read( (char*)&tmp_stockItem, sizeof(tmp_stockItem) ) ) { // after a successfull read we store the the item into the array memcpy( &array[numOfItems], &tmp_stockItem, sizeof( array[numOfItems] ) ); numOfItems++; } cls(); // returning the number of array items we read from the file return numOfItems; }
Broken code with new function:
Code:#include <iostream> #include <fstream> #include <conio.h> //for getch() using namespace std; const int NUM_OF_ITEMS = 125; struct StockItem { int code; char desc[20]; float price; }stock[NUM_OF_ITEMS]; /*struct bill_line { StockItem product; float weight; float cost; }; struct bill { bill_line items[20]; int num_lines; };*/ void cls(void) { system("cls"); } //function designed to aid portability. void disp_menu( void ); StockItem enter_data( void ); void delete_data( StockItem* ); void see_stock( StockItem*, int ); void writeToDisk( StockItem*, int ); int readFromDisk( StockItem* ); int main() { int ans, ctr; int num_items = 0; do { do { disp_menu(); cin >> ans; } while ((ans<1) || (ans>6)); switch (ans) { case 1: stock[num_items] = enter_data(); num_items++; break; case 2: delete_data( stock ); break; case 3: see_stock(stock, num_items); break; case 4: writeToDisk( stock, num_items ); // NOT writing the whole array to disk. break; case 5: num_items = readFromDisk( stock ); // setting the number items we read from file break; default: break; } }while (ans!=6); return 0; } void disp_menu() { cout << "\n*** The Corner Shop ***\n\n"; cout << "Select an option: \n\n"; cout << "\t1. Enter new stock item " << endl; cout << "\t2. Delete stock item " << endl; cout << "\t3. See current stock " << endl; cout << "\t4. Save stock to disk " << endl; cout << "\t5. Load stock from disk " << endl; cout << "\t6. Exit \n" << endl; cout << "option> "; } StockItem enter_data() { StockItem stock_item; cls(); cout << "\n\nWhat is the product code: "; cin >> stock_item.code; cout << "What is the product description: "; cin.ignore(); cin.getline(stock_item.desc, 20); cout << "What is the product price: "; cin >> stock_item.price; cls(); return (stock_item); } void delete_data(StockItem stock[NUM_OF_ITEMS] ) { StockItem stock_temp[NUM_OF_ITEMS]; int item; cls(); cout << "Enter item to delete "; cin >> item; for(int i = 0; i < NUM_OF_ITEMS; i++){ { if(i == item) continue; stock_temp[i] = stock[i]; } for(int j = 0; i < NUM_OF_ITEMS; j++) stock[j] = stock_temp[j]; cls(); } void see_stock(StockItem stock[NUM_OF_ITEMS], int num_items) { int ctr; cls(); cout << "\n\nHere is the stock listing:\n\n"; for (ctr = 0; ctr < num_items; ++ctr) { cout << "Item " << ctr+1 << endl; cout << "Product Code: " << stock[ctr].code << endl; cout << "Product Description: " << stock[ctr].desc << endl; cout << "Price: " << stock[ctr].price << endl; cout << "------------------------------------------------\n"; } cout << "\nHit any key to continue.....\n"; getch(); cls(); } void writeToDisk( StockItem* array, int numOfItems ) { ofstream outfile( "items.txt" ); if (outfile.bad()) { cout << "\n*** Error opening file ***\n"; } for( int index = 0; index < numOfItems; index++ ) outfile.write( (char*)&array[index], sizeof(StockItem) ); cls(); } int readFromDisk( StockItem* array ) { int numOfItems = 0; ifstream infile( "items.txt" ); if (infile.bad()) { cout << "\n*** Error opening file ***\n"; } StockItem tmp_stockItem; // read from the file until we reach EOF while( infile.read( (char*)&tmp_stockItem, sizeof(tmp_stockItem) ) ) { // after a successfull read we store the the item into the array memcpy( &array[numOfItems], &tmp_stockItem, sizeof( array[numOfItems] ) ); numOfItems++; } cls(); // returning the number of array items we read from the file return numOfItems; }



LinkBack URL
About LinkBacks


