初步问题解决了。 (这是重新定义错误)
此外,我不知道如何创建一个学生构造函数,它提供以下内容:
这就是我希望程序/构造函数工作的方式:
//main.cpp
Student s1(4015885);
s1.print();
Student s2("Test", "Student", 22, 5051022);
s2.print();
输出应如下:
Standart
Name
18
4015885
Test
Student
22
5051022
s1有效,但s2不起作用,因为我没有合适的构造函数
这是我的Person.h
#pragma once
#include <iostream>
#include <string>
using namespace std;
class Person {
public:
Person(string name = "Standard", string surname = "Name", int age**strong text** = 18);
//GET
//SET
void print();
protected:
string name, surname;
int age;
};
Person.cpp
#include <iostream>
#include <string>
#include "Person.h"
using namespace std;
Person::Person(string n, string s, int a) : name(n), surname(s), age(a)
{
cout << "Person constructor" << endl;
}
void Person::print() {
cout << name << endl << surname << endl << age << endl << endl;
}
Student.h
#pragma once
//#ifndef PERSON_H
//#define PERSON_H
#include "Person.h"
class Student : public Person {
public:
Student(int matrikel_nummer);
int get_matriculation_number();
void set_matriculation_number(int matriculation_number) {
this->matriculation_number = matriculation_number;
}
void print();
private:
int matriculation_number;
};
//#endif
Student.cpp
#include <iostream>
#include <string>
#include "Student.h"
using namespace std;
Student::Student(int matrikel_nummer) : Person(name, surname, age)
{
cout << "Student constructor" << endl;
this->matriculation_number = matriculation_number;
}
void Student::print() {
cout << name << endl
<< surname << endl
<< age << endl
<< matriculation_number << endl << endl;
}
答案 0 :(得分:2)
在Student.h
你有
Student(int matriculation_number) : Person(name, surname, age){};
声明并定义Student
的构造函数。然后在Student.cpp
你有
Student::Student(int matrikel_nummer) : Person(vorname, nachname, alter)
{
cout << "Student constructor" << endl;
this->matrikel_nummer = matrikel_nummer;
}
重新定义了相同的构造函数。
您需要摆脱类
中的构造函数定义Student(int matriculation_number) : Person(name, surname, age){};
//becomes
Student(int matriculation_number);
或删除cpp文件中的构造函数。
同样name, surname, age, vorname, nachname, alter
也不会出现在您提供的代码中的任何位置。除非他们在其他地方声明,否则不会编译。
编辑:
从评论看来,Student
构造函数应该是
Student(string n, string s, int a, int mn) : Person(n, s, a), matriculation_number(mn) {}
你可以把它放在标题中,而你不需要cpp文件中的构造函数定义。
答案 1 :(得分:2)
您的错误在这里:
Student(int matriculation_number) : Person(name, surname, age){};
删除{}
和基本电话:
Student(int matriculation_number);
答案 2 :(得分:0)
您已经定义了学生的构造函数体:
Student(int matriculation_number) : Person(name, surname, age){};
这已经是构造函数体的完整实现,你应该在头文件中写下这个:
Student(int matriculation_number);