簡體   English   中英

錯誤:classname沒有命名類型

[英]error: classname does not name a type

我是一名從指針開始的中級學生。 我正在嘗試將數據存儲在一個數組中,稍后由搜索功能調用。 當我嘗試編譯時,我被告知“錯誤:零售沒有命名類型”,我不明白這意味着什么或如何解決它。

// ********************************************************
// Starting Out with C++                                  *
// From Control Stuctures through Objects                 *
// seventh edition                                        *
//                                                        *
// Chapter 8 Searching and Sorting Arrays                 *
//                                                        *
// Serendipity Booksellers Software Development           *
// Project — Part 8: A Problem-Solving Exercise           *
//                                                        *
// Multi-File Program                                     *
// ********************************************************
#include "bookinfo.h"
#include "cashier.h"
#include "invmenu.h"
#include "reports.h"
#include <iostream>
using namespace std;

// Constant for array sizes
const int SIZE = 20;
// Global Arrays
string bookTitle[SIZE];
string isbn[SIZE];
string author[SIZE];
string publisher[SIZE];
string dateAdded[SIZE];
int qtyOnHand[SIZE];
double wholesale[SIZE];
double retail[SIZE];

retail[SIZE] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};

wholesale[SIZE] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};

qtyOnHand[SIZE] = {10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10};


dateAdded[0] = "1/1";
dateAdded[1] = "1/1";
dateAdded[2] = "2/1";
dateAdded[3] = "3/1";
dateAdded[4] = "4/1";
dateAdded[5] = "5/1";
dateAdded[6] = "6/1";
dateAdded[7] = "7/1";
dateAdded[8] = "8/1";
dateAdded[9] = "9/1";
dateAdded[10] = "10/1";
dateAdded[11] = "11/1";
dateAdded[12] = "12/1";
dateAdded[13] = "13/1";
dateAdded[14] = "14/1";
dateAdded[15] = "15/1";
dateAdded[16] = "16/1";
dateAdded[17] = "17/1";
dateAdded[18] = "18/1";
dateAdded[19] = "19/1";


author[0] = "0";
author[1] = "1";
author[2] = "2";
author[3] = "3";
author[4] = "4";
author[5] = "5";
author[6] = "6";
author[7] = "7";
author[8] = "8";
author[9] = "9";
author[10] = "10";
author[11] = "11";
author[12] = "12";
author[13] = "13";
author[14] = "14";
author[15] = "15";
author[16] = "16";
author[17] = "17";
author[18] = "18";
author[19] = "19";

bookTitle[0] = "0";
bookTitle[1] = "1";
bookTitle[2] = "2";
bookTitle[3] = "3";
bookTitle[4] = "4";
bookTitle[5] = "5";
bookTitle[6] = "6";
bookTitle[7] = "7";
bookTitle[8] = "8";
bookTitle[9] = "9";
bookTitle[10] = "10";
bookTitle[11] = "11";
bookTitle[12] = "12";
bookTitle[13] = "13";
bookTitle[14] = "14";
bookTitle[15] = "15";
bookTitle[16] = "16";
bookTitle[17] = "17";
bookTitle[18] = "18";
bookTitle[19] = "19";

isbn[0] = "0";
isbn[1] = "1";
isbn[2] = "2";
isbn[3] = "3";
isbn[4] = "4";
isbn[5] = "5";
isbn[6] = "6";
isbn[7] = "7";
isbn[8] = "8";
isbn[9] = "9";
isbn[10] = "10";
isbn[11] = "11";
isbn[12] = "12";
isbn[13] = "13";
isbn[14] = "14";
isbn[15] = "15";
isbn[16] = "16";
isbn[17] = "17";
isbn[18] = "18";
isbn[19] = "19";


int main()
{
    int choice = 0; // To hold the user's menu choice

    // Display the menu until the user selects item 4
    while (choice != 4)
    {
        cout << "Serendipity Booksellers\n";
        cout << "\tMain Menu\n\n";

        cout << "1.Cashier Module\n";
        cout << "2.Inventory Database Module\n";
        cout << "3.Report Module\n";
        cout << "4.Exit\n\n";

        // Get the menu choice as input from the user
        cout << "Enter Your Choice: ";
        cin >> choice;

        // Validate the user's input
        while (choice < 1 || choice > 4)
        {
            cout << "\nPlease enter a number in the range 1 - 4.\n";

            cout << "Enter Your Choice: ";
            cin >> choice;
        }

        // Display a selection message
        {
            switch (choice)
            {
                case 1:
                    cashier();
                    break;
                case 2:
                    invMenu();
                    break;
                case 3:
                    reports();
                    break;
                case 4:
                    cout << "\nYou selected item 4.\n";
                    break;
            }
        }

        cout << endl << endl;
    }
    return 0;
}

我怎么沒能初始化數組? 我是否錯誤地格式化了我的聲明?

您無法使用以下內容初始化數組:

retail[SIZE] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};

您可以在聲明它時初始化它。

double retail[SIZE] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};

或者您可以使用for循環設置值。

for (int i = 0; i < 20; ++i )
{
   retail[i] = i;
}

使用C ++ 11初始化列表是一個祝福,並與std :: vector非常匹配:

初始化
std::vector<double> retail {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
分配
std::vector<double> retail2; retail2 = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};

盡量避免C數組,vector有:
- 檢查
- 自動內存管理(RAII,自動增長等)
- 迭代器
- 與STL的算法和適配器很好地融合

雖然你最初提出的問題已經解決了,但我認為更大的問題是使用“並行數組” - 這種數據結構是許多錯誤的根源。 例如,創建用於描述每個書籍條目的結構或類以及維護這些項目的集合要好得多

class BookEntry {

public:
    BookEntry(const std::string &title, const std::string &author, const std::string &isbn, double wholesalePrice, double retailPrice, const std::string &dateAdded, int quantityOnHand = 0)
        : title_m(title), author_m(author), isbn_m(isbn), wholesalePrice_m(wholesalePrice), retailPrice_m(retailPrice), dateAdded_m(dateAdded), quantityOnHand_m(quantityOnHand)
    {

    }

    std::string title_m;
    std::string author_m;
    std::string isbn_m;

    double retailPrice_m;
    double wholesalePrice_m;
    std::string dateAdded_m;

    int quantityOnHand_m;
};

// main.cpp

#include <iostream>
#include "BookEntry.h"

int main(int argc, const char * argv[])
{
    BookEntry bookEntries[] = {
            // Title,                        Author,           ISBN,             Wholesale,      Retail,      DateAdded,       QuantityOnHand
            { "The Hobbit",                  "J.R.R. Tolkein", "978-0547928227", 5.43,           9.77,        "1937-Sep-21",   1234 },
            { "The Fellowship of the Ring",  "J.R.R. Tolkein", "978-0547928210", 7.99,           10.67,       "1954-Jul-29",   4321 },
            { "The Two Towers",              "J.R.R. Tolkein", "978-0547928203", 8.01,           10.68,       "1954-Nov-11",   3214 },
            { "The Return of the King",      "J.R.R. Tolkein", "978-0547928197", 8.43,           10.77,       "1955-Oct-20",   2143 },
            { "The Talisman",                "Stephen King",   "978-1451697216", 4.31,            8.98,       "1984-Nov-08",   3333 }
    };


    for (auto &b : bookEntries) {
        std::cout << "Title: " << b.author_m << "; Author: " << b.author_m << std::endl;
    }

    return 0;
}

請注意,現在如何以一致的方式組織用於初始化BookEntry的數據,以便更容易識別數組中的“記錄”,並且更難以將元素輸出,從而使整個結構不一致。

在實際操作中,您可能會重構BookEntry以將書籍標識與其庫存和定價信息分開,所有這些都將保存在數據庫中並從那里初始化,但您仍然希望程序中有一個好的數據模型,不只是大量的並行陣列。

您不能像這樣初始化零售,試試這個:

double retail[SIZE] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};

雖然在使用c++我會建議嘗試使用諸如向量之類的stl類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM