C++创建类类型数组遇编译错误,求技术支持
解决你的C++类数组编译错误问题
Hey,我帮你排查下代码里导致这些编译错误的几个核心问题,一个个来解决:
未声明的book类型
你在Eason类里写了book array[100];,但编译器完全不知道book是什么——要么你漏写了book类的定义/声明,要么book的定义在Eason类之后(编译器是顺序解析代码的,后面的类型前面用不了),这直接导致了一堆语法错误,比如“未知重写说明符”“缺少逗号”。
修正方案:
- 如果
book是你自己写的类,一定要把它的声明/定义放在Eason类前面:// 先声明book类(如果完整定义在后面的话) class book; // 或者直接写book的完整定义 class book { // 这里放book的成员,比如title、publisher这些 std::string title; std::string publisher; int numInStock; }; class Eason { // ... 你的其他成员 book array[100]; // 现在编译器能识别book了 // ... };
类内非静态成员初始化的兼容性问题
你写的int b=0;,在C11之前的标准里,非静态成员变量不能直接在类里初始化。如果你的编译器没开启C11及以上的支持,这条语句就会报错。
修正方案:
- 要么开启编译器的C++11+支持(比如GCC编译时加
-std=c++11或更高版本的参数); - 要么把初始化逻辑放到类的构造函数里:
class Eason { int b; // 先声明变量 // ... 其他成员 public: // 用构造函数初始化列表给b赋值 Eason() : b(0) {} // ... 其他成员函数 };
不完整的函数声明
你的addBook函数写到一半就断了:void addBook(std::string, std::string, int, s...,参数列表不完整,编译器根本不知道你要写什么,自然会报“缺少')'”“意外标记”这类错误。
修正方案:
补全参数列表,比如如果最后一个参数是字符串,就写成:
void addBook(std::string, std::string, int, std::string);
如果是需要可变参数,要使用C++正确的可变参数语法(比如...或者模板参数包,不过作业里大概率是漏写了参数类型)。
类定义末尾缺少分号
C++规定,类定义结束后必须在}后面加;,哪怕你的代码片段没写完,这个细节也不能忘,否则编译器会报错。
修正后的完整示例代码
给你一个修正后的极简版本,你可以参考调整:
#include <string> // 先定义book类 class book { std::string title; std::string publisher; int numInStock; }; class Eason { int b; book array[100]; protected: std::string title; std::string publisher; int numInStock; public: Eason() : b(0) {} // 补全的addBook函数声明 void addBook(std::string bookTitle, std::string bookPublisher, int stockNum, std::string bookAuthor); };
按照上面的步骤修改后,那些编译错误应该就能全部解决啦。
内容的提问来源于stack exchange,提问作者nanriat
相关产品推荐
相关产品推荐

