下午好!我在编译的时候用C++写了一个简单的类,我遇到了这样一个奇怪的问题..我对C++不太了解,但这是我的.h
和.cpp
文件:
如果代码的拼写有错误,请留下这样的注释以备后用:C++不能这样写,但你要喜欢这样……
学生.cpp
#include "Student.h"
#include <string>
using std::string;
Student::Student(){}
void Student::setName(string n){
name = n;
}
void Student::setSurname(string s){
surname = s;
}
void Student::setAge(int a){
age = a;
}
void Student::setCourse(int c) {
course = c;
}
void Student::setGroup(string g){
group = g;
}
void Student::setMarks(string* mark){
marks = mark;
}
string Student::getName(){
return name;
}
string Student::getSurname(){
return surname;
}
int Student::getAge(){
return age;
}
int Student::getCourse(){
return course;
}
string Student::getGroup(){
return group;
}
string* Student::getMarks(){
return marks;
}
学生.h
#ifndef Student_h
#define Student_h
#include <string>
using std::string;
class Student{
public:
Student();
void setName(string);
string getName();
void setSurname(string);
string getSurname();
void setAge(int);
int getAge();
void setCourse(int);
int getCourse();
void setGroup(string);
string getGroup();
void setMarks(string*);
string* getMarks();
private:
string name;
string surname;
int age;
int course;
string group;
string* marks;
};
#endif
主.cpp
#include <stdio.h>
#include <iostream>
#include "Student.h"
using std::cout;
using std::endl;
int main(){
Student test;
string marks[] = {"B","B","C","A","A","A"};
test.setName("Name");
test.setSurname("Surname");
test.setAge(100);
test.setCourse(100);
test.setGroup("606.4");
test.setMarks(marks);
cout << test.getName() << endl;
cout << test.getSurname() << endl;
cout << test.getAge() << endl;
cout << test.getCourse() << endl;
cout << test.getGroup() << endl;
string* mark = test.getMarks();
for(int i = 0 ; i < 6 ; i++){
cout << mark[i] <<" ";
}
}
我认为我做的一切都是对的,但是在编译过程中出现了一个奇怪的错误......
这是编译的时候Main.cpp
这是编译时Student.cpp
告诉我我所有的错误在哪里?
至于为什么它不编译 - 正如已经提到的,你的错误是链接错误,所以这个文件没有连接到项目
Student.cpp
,而找不到的WinMain
那个表明你正在尝试创建一个窗口应用程序,而不是控制台应用程序。但是你还有问题的第二部分——如何写。你没有错误——从某种意义上说它们会导致程序失败。但是,大致就像你制定的那样 - 你不应该像那样用 C ++ 编写......
我首先要说的是,您实际上没有课程,而是结构。从某种意义上说,您的类不包含任何应保持一致状态的特定内部状态,或除设置和返回字段之外的任何其他功能。因此,我个人认为简单地将您的类声明为一个结构(即具有所有公共成员的类)并直接与它们一起工作并不是什么大罪:
如果计划进行一些更严肃的工作,或者作业要求它是一个类,那么最好将这种小的单行函数内联(嵌入),即 直接在类声明中定义它们。这将允许编译器不调用它们,而只是将它们内联到代码中,这对性能有好处。还有一件事——我会将所有返回函数设为 const——这样它们也可以在 const 对象上调用。我会将行作为常量引用进行传输,以减少复制。
另外,你的分数显然是单字符的,所以我不会使用字符串数组,而只是使用一个字符串——一般来说,它是一个字符数组(同时,我会添加一个函数来添加一个分数- 即连接下一个字符的行)。此外,您将摆脱所谓的“魔法常量”——在推导有 6 个评级时您不必记住:
然而 - 你将所有行复制到 class中,这是正确的 - 对象结果是自给自足的,“我随身携带一切。” 但是您只需将此数组作为指向类外部实体的指针传递。如果它发生变化,那么类的状态也会发生变化。粗略地说,你的学生的记录簿不是记录簿,而是一张纸的封面,上面写着——“我的成绩写在那里,在黑板上”——任何欺负者都可以纠正它们……即 即使您使用的是字符串数组,也最好将其复制到内部,以实现更好的封装。
然而——你为什么不创建另一个构造函数来立即创建一个命名的学生?名字和姓氏不太可能改变(除非学生结婚 :))。