错误:classname没有命名类型
error: classname does not name a type
我是一个从指针开始的中级学生。我试图将数据存储在数组中,稍后由搜索函数调用。当我试图编译时,我被告知"error: retail 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 Booksellersn";
cout << "tMain Menunn";
cout << "1.Cashier Modulen";
cout << "2.Inventory Database Modulen";
cout << "3.Report Modulen";
cout << "4.Exitnn";
// 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;
}
虽然你最初问的问题已经解决了,但我认为更大的问题是"并行数组"的使用——这种数据结构是许多bug的来源。最好创建一个结构体或类来描述每一个图书条目,并为它们维护这些条目的集合,例如
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
,将图书标识与其库存和定价信息分离,所有这些都将保存在数据库中并从那里初始化,但是您仍然希望在程序中有一个良好的数据模型,而不仅仅是大量的并行数组。
使用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数组,向量有:
绑定检查
-自动内存管理(RAII,自动增长等)
迭代器
-与STL
你不能像那样初始化零售,试试这个:
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
类型,如矢量。
- ArduinoJson 6.15.2:JsonObject没有命名类型
- 防止主数据类型C++的隐式转换
- 大量序列中核苷酸类型的快速计数
- 如何从C++中的依赖类型中获得它所依赖的类型
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如何获取std::result_of函数的返回类型
- 从父命名空间重载类型
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 访问者访问变体并返回不同类型时出错
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- C++ 两个类相互引用 错误:'ClassName'之前预期的类型说明符
- Arduino:'void (ClassName::)()' 类型的参数在附加中断时与'void (*)()'不匹配
- 如何解决字段'classname'类型错误不完整
- Visual Studio c++代码格式-返回类型+ classname::func缩进
- 错误:classname没有命名类型
- ClassName&作为返回类型是什么意思?
- 'ClassName'不命名类型