prototype voor “…” komt niet overeen met een van de klassen “…”

Ik ben begonnen met programmeren in c++ en ik ben het concept van klassen en objecten aan het leren. Dus ik zocht op internet naar enkele oefeningen waarop ik kan oefenen. Ik heb gelezen dat het een goede gewoonte is om het hoofd-, kop- en constructorbestand gescheiden te houden en niet in één lang bestand.

Ik probeer de volgende code in drie afzonderlijke bestanden te splitsen:

// Exercises: Classes
// Exercise 3
// Exercises: Classes
// Exercise 3
#include <iostream>
using namespace std;
class Student{
public:
char *name;
int mark1;int mark2;
Student(char* na, int ma1,int ma2){
name=na;mark1=ma1;mark2=ma2;
}
int calc_media(){return (mark1+mark2)/2;}
    void disp(){
    cout << "Student:" << name << " \n media:"<< calc_media() <<"\n";
    }
};
int main(){
    char* nam;int m1,m2;
    cout << "Enter name:";
    cin>> nam;
    cout << "Enter marks of two subjects:";
    cin>> m1;
    cin>> m2;
    Student student1(nam,m1,m2);
    student1.disp();
    return 0;
}

in de volgende bestanden:

main.cpp:

#include <iostream>
#include <string>
#include "student_example.h"
using namespace std;
int main()
{
   int marc1,marc2;
   char nam;
   cout<<"Please enter the name of the student:  ";
   cin>>nam;
   cout<<"Please enter the two grades of the student"<<"\n grade one:";
   cin>>marc1;
   cout<<"Grade two";
   cin>>marc2;
   student_Example student1;
   student1.disp();
   return 0;
}

headerbestand (student_Example.h)

#ifndef STUDENT_EXAMPLE_H
#define STUDENT_EXAMPLE_H
#include <iostream>
#include <string>
class student_Example
{
    public:
        char name;
        int mark1, mark2;
        int calc_media(){
           return (mark1+mark2/2);
           }
void disp(){
           std::cout<< " The student named: "<< name<< "\n has an average score equal to: " << calc_media()<<"\n";
        }
};

En constructeur:

#include <iostream>
#include <string>
#include "student_Example.h"
student_Example::student_Example(char nam, int marc1, int marc2)
{
    name=nam;
    mark1=marc1;
    mark2=maec2;
}

Ik krijg de foutmelding

"error: prototype for **'student_Example::student_Example(char, int, int)' does not match any class 'student_Example'**

Enig advies wat hier aan de hand kan zijn? Bij voorbaat dank 🙂


Antwoord 1, autoriteit 100%

Je headerbestand met class student_Examplebelooft geen constructor. (En lijkt te ontbreken en #endif)

#ifndef STUDENT_EXAMPLE_H
#define STUDENT_EXAMPLE_H
#include <iostream>
#include <string>
class student_Example
{
    public:
        student_Example(char nam, int marc1, int marc2); //<-- as pointed out in the error
        char name;
        int mark1, mark2;
        int calc_media(){
           return (mark1+mark2/2);
        }
       void disp(){
           std::cout<< " The student named: "<< name<< "\n has an average score equal to: " << calc_media()<<"\n";
        }
};
#endif  //<-- this too

Terwijl we er zijn, kunnen we een ledeninitialisatielijstgebruiken in de constructeur

student_Example::student_Example(char nam, int marc1, int marc2) :
    name(nam),
    mark1(marc1),
    mark2(marc2) //assume maerc2 was a typo
{    
}

Bewerken:
Merk op dat student_Example(char nam, int marc1, int marc2)een verklaring is dat je een constructor definieert met een charen twee ints ., die u in uw cpp-bestand hebt gedaan.

Je kunt zo’n object maken

student_Example example('n', 1, 2);

Zonder deze niet-standaardconstructor, zou een standaardconstructor die geen parameters gebruikt, automatisch een generator voor u zijn geweest, dus u had een object als dit kunnen maken:

student_Example example;

Je hebt nu een constructor gedefinieerd die niet meer zal voorkomen. Je moet dit ofwel aan je klas toevoegen, of ervoor zorgen dat je de constructor gebruikt die parameters gebruikt.


Antwoord 2, autoriteit 33%

doctorlovelost uw probleem op, maar het is ook een goede gewoonte om de methoden in de .cppbestand, zoals dit:

student_Example.h

#ifndef STUDENT_EXAMPLE_H
#define STUDENT_EXAMPLE_H
#include <iostream>
#include <string>
class student_Example
{
    public:
        student_Example(char nam, int marc1, int marc2); //<-- as pointed out in the error
        char name;
        int mark1, mark2;
        int calc_media();
        void disp();
};
#endif

student_Example.cpp

#include "student_Example.h"
student_Example::student_Example(char nam, int marc1, int marc2) :
    name(nam),
    mark1(marc1),
    mark2(marc2) //assume maerc2 was a typo
{    
}
int student_Example::calc_media(){
    return (mark1+mark2/2);
}
void student_Example::disp(){
    std::cout<< " The student named: "<< name<< "\n has an average score equal to: " << calc_media()<<"\n";
}

Other episodes