C ++构造函数问题//继承类

时间:2016-01-26 16:07:19

标签: c++

初步问题解决了。 (这是重新定义错误)

此外,我不知道如何创建一个学生构造函数,它提供以下内容:

这就是我希望程序/构造函数工作的方式:

//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;
}

3 个答案:

答案 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);