- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我仍在努力学习 C++,我的第一个方法来自 C 的非对象方面。所以我想重做我的结构并利用类数据结构。我想出了这个。
在 Gradebook.h 中
class Gradebook {
public:
//default constructor, initializes variables in private
Gradebook();
//accessor constructor, access members in private
private:
struct Student {
int student_id;
int count_student;
string last;
string first;
};
struct Course {
int course_id;
int count_course;
string name;
Student *students;
};
};
在我的 Gradebook.cpp 中
Gradebook::Gradebook() {
Course *courses = new Course;
courses->students = new Student;
courses->count_course = 0;
courses->course_id = 0;
courses->students->count_student = 0;
courses->students->student_id = 0;
}
我的设计
我想动态创建 x_amount
给 Students
和 x_amount
的 Courses
。
问题
我不明白如何访问我的结构,所以我可以开始在我的结构中添加类(class)和学生。
我相信如果我可以尝试访问我的结构并操作其中的成员,我就可以完成剩下的工作。我试过:
void Gradebook::newCourse(Course *courses) {
//do stuff
}
当我尝试编译它时,我遇到了各种错误:
In file included from gradebook.cpp:2:
./gradebook.h:9:18: error: C++ requires a type specifier for all declarations
void newCourse(&Course);
gradebook.cpp:39:17: error: out-of-line definition of 'newCourse' does not match any
declaration in 'Gradebook'
void Gradebook::newCourse(Course *courses) {
2 errors generated.
In file included from main.cpp:4:
./gradebook.h:9:18: error: C++ requires a type specifier for all declarations
void newCourse(&Course);
感谢对这个菜鸟的任何帮助。提前致谢!
最佳答案
您的整个设计可能需要一些工作。
您的结构应该自行初始化。他们在Gradebook
之外也是有意义的.
这是执行此操作的示例“C++ 方式”:
首先注意std::vector是一个动态数组。与其不必要地管理自己的内存,不如使用 std::vector
反而。使用 std::vector
, 你需要输入 #include <vector>
在文件顶部的某个位置。
对于 Student
, 我们删除了 count_student
多变的。一个容器应该跟踪学生的数量。 Student
现在还通过构造函数初始化自己的值。注意我是如何使用 constructor initialization list 的.
struct Student
{
Student () ;
int student_id;
std::string first;
std::string last;
};
Student::Student () : student_id (0)
{
}
我们为 Course
做类似的事情.再一次,这里重要的是 Course
正在初始化和管理自己的变量。
struct Course
{
Course () ;
int course_id;
std::string name;
std::vector <Student> students;
};
Course::Course () : course_id (0)
{
}
Gradebook
类现在被简化了。注意如何 NewCourse
需要 reference而不是指针。
class Gradebook {
public:
Gradebook () ;
void NewCourse (const Course &course) ;
private:
std::vector <Course> courses;
};
Gradebook::Gradebook ()
{
}
void Gradebook::NewCourse (const Course &course)
{
courses.push_back (course) ;
}
其他想法
我可能会取出 std::vector <Student> students;
来自 Course
.是的,一门类(class)可能有很多学生,一个学生也可能选修多门类(class)。这种多对多关系可能会让人头疼,也可能不会。
this link 中描述了一种处理方法.另一种方法是必须构建存储学生和类(class)对的结构。
更新
这是 std::vector::push_back 的函数签名:
void push_back (const value_type& val);
如您所见,该函数返回 void
, 所以你不能做类似 courses.push_back(id_number)->course_id
的事情.此函数仅将一个对象插入到您的 vector 中。
这是一个如何使用 std::vector
的例子与 Student
结构。首先,为了让事情变得更简单,我将向 Student
添加一个新的构造函数。 .请注意,我也更改了 student_id
只是id
以尽量减少冗余。
struct Student
{
Student () ;
Student (const int id, const std::string &first, const std::string &last) ;
int id;
std::string first;
std::string last;
};
Student::Student () : id (0)
{
}
Student::Student (const int id, const std::string &first, const std::string &last)
: id (id), first (first), last (last)
{
}
这是一个如何使用 vector 的例子。
int main (void)
{
// Create some students.
Student s1 (1, "Bob", "Smith") ;
Student s2 (2, "Katy", "Adams") ;
Student s3 (3, "Mary", "Williams") ;
// Create vector of students.
std::vector <Student> students ;
// Insert the students into the vector.
students.push_back (s1) ;
students.push_back (s2) ;
students.push_back (s3) ;
// Go through the students and print out data.
for (unsigned n = 0; n < students.size (); ++n) {
// Grab a reference to one of the students.
Student &student = students [n] ;
// Print out information, be sure to #include <iostream> somewhere.
std::cout << "ID: " << student.id
<< ", Name: " << student.first << " " << student.last << "\n" ;
}
// To update Bob's name to Rob.
students [0].first = "Rob" ;
return 0 ;
}
关于类中的c++动态结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23161683/
在 JavaScript 中,我们可以动态创建 元素并附加到 部分,以便为大量元素应用 CSS 规则。 这种方法的优点或缺点是什么? 如果它确实提供了与元素上的 javascript 迭代相比的性
我有这个代码 import "./HTTPMethod.dart"; import '../../DataModel/DataModel.dart'; mixin RouterMixin { HT
哪些 OLAP 工具支持动态、动态地创建维度或层次结构? 例如,层次结构将成员定义为:“前 5 名”、“前 6-10 名”、“其他”... 计算成员是通常的答案,我正在寻找不同的东西。计算器的问题。成
我正在 CakePHP 中创建一个“表单编辑器”。 该界面允许用户选择要应用于字段的验证,例如数字、电子邮件等 因此,我需要根据用户输入为模型动态创建验证。为此,我可以使用验证对象:https://b
这是一个场景: 我有一个Web服务,我们将其称为部署在tomcat(轴)上的StockQuoteService。通过此 Web 服务公开了 getStockQuote() 方法。 现在,我想构建一个
我正在尝试从服务器获取 JSON 响应并将其输出到控制台。 Future login() async { var response = await http.get( Uri.
我从另一个问题中得到了这段代码(感谢 chunhunghan)。我需要创建一个登录屏幕,并尝试根据服务器发回给我的响应来验证用户凭据,但是每次我尝试运行代码时,它都会给我“未处理的异常:Interna
当我在“Dart”主程序中运行它时,一切正常,并且我得到了一个与会者列表。但是,当我在我的 Flutter 应用程序中调用它时,出现错误: flutter:“List”类型不是“List>”类型的子类
本文实例为大家分享了js实现验证码动态干扰的具体代码,供大家参考,具体内容如下 效果一 效果二 代码一 ?
目前我正在为我的网站使用 No-Ip,我想使用 cloudflare 来抵御 ddos 和机器人程序。我注意到您需要一个用于 cloudflare 的域。我还搜索了网络,发现了一个叫做 cloud
有没有办法在 Excel VBA 中构建动态 if 语句?基本上我正在尝试创建一个参数化计算,用户将能够输入不同的变量,即 变量 1 “变量 2” “变量 3” 在这种情况下 变量 1 是单元格引用
大家好, 请查看上面的图片,我有两张 table 。在下面代码的第一个表中,我得到了这种格式。 但我想像 Table2 那样格式化,每个合并单元格中的行数是动态的,而且不一样。 有没有办法像table
如何根据我添加的 View 修改标题部分的高度?heightForHeaderInSection在 viewForHeaderInSection 之前被调用我不知道 View 大小,直到我创建它。 最
是否存在在运行时生成 AST/解析树的解析器?有点像一个库,它会接受一串 EBNF 语法或类似的东西并吐出数据结构? 我知道 antlr、jlex 和他们的同类。他们生成可以做到这一点的源代码。 (喜
我在持有汽车制造商的表格上有一个 MultipleChoiceField。我想将我的汽车数据库过滤到已检查的品牌,但这会导致问题。如何动态获取所有 Q(make=...) 语句? 我如何开始:['va
$end = preg_replace($pattern, $replacement, $str); 如何使替换字符串 $replacement 随 $str 中的每次匹配而变化?例如,我想用关联的图
我正在编写一个 VBA 程序,用于过滤表中的值。我试图使其成为一个适用于您提供的所有表格的通用程序。在我的程序中,我必须设置它正在过滤的表的范围:Set rng = dataSheet.Range("
我正在循环一个元素数组,并且我想使用给定的模板递归地显示该元素 然后在该模板内使用带有切换功能的按钮来显示/隐藏给定元素的Child的更深级别模板(Child也是一个元素) 这是我的模板
从客户端(html)发送表单,服务器端通过选择选项之一决定运行哪个函数。 const decideWho = (form) => { const choice = form.choice; c
我有一个具有以下属性的按钮: circle_normal.xml(在 res/drawable 中) circle.xml(在 res/drawable 中)
我是一名优秀的程序员,十分优秀!